解题思路和注意事项:
用了三目运算符把三个数的排序搞出来了,见下文:
最小数:(a<b?a:b)<c?(a<b?a:b):c
最大数:(a>b?a:b)>c?(a>b?a:b):c
中间数:a<b?(a>c?a:(c<b?c:b)):(a<c?a:(b>c?b:c))
参考代码:
#include<stdio.h> int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%d %d %d\n",(a<b?a:b)<c?(a<b?a:b):c, a<b?(a>c?a:(c<b?c:b)):(a<c?a:(b>c?b:c)), (a>b?a:b)>c?(a>b?a:b):c); return 0; }
0.0分
106 人评分
int main(){ int a, b, c; scanf("%d%d%d", &a, &b, &c); int min, mid, max; min = (a<b?a:b)<c?(a<b?a:b):c; max = (a>b?a:b)>c?(a>b?a:b):c; mid = (a+b+c) - min - max; printf("%d %d %d", min, mid, max); return 0; }
#include<stdio.h> #include<math.h> #include<string.h> void exchange(int* n1, int* n2, int* n3); void swap(int *,int *); int main() { int a=0, b=0, c=0; scanf("%d %d %d", &a, &b, &c); exchange(&a, &b, &c); printf("%d %d %d ", a, b, c); return 0; } void exchange(int* n1, int* n2, int* n3) { if (*n1 > *n2) swap(n1, n2); if (*n1 > *n3) swap(n1, n3); if (*n2 > *n3) swap(n2, n3); return; } void swap(int* x,int* y) { int temp = 0; temp = *x; *x = *y; *y=temp; return; } 我不推荐答主的题解,因为程序员在后期维护代码的时候会,原地自爆。(谁TM知道错在哪啊?!) 谨记 单一出口原则,并尽可能对代码进行封装。
#include<stdio.h> int main() { int a,b,c; scanf("%d %d %d", &a, &b, &c); if(a>b){ if(b>c){ printf("%d %d %d",c,b,a); } else{ if(a>c){ printf("%d %d %d",b,c,a); } else{ printf("%d %d %d",b,a,c); } } } else{ if(a>c){ printf("%d %d %d",c,a,b); } else{ if(b>c){ printf("%d %d %d",a,c,b); } else{ printf("%d %d %d",a,b,c); } } } return 0; }
菜鸡待宰 2020-02-07 20:34:36 |
单一出口原则。。。
#include <stdio.h> void min(int a[],int b); main () { int a[3]; for(int i=0;i<3;i++) scanf("%d",&a[i]); min(a,3); for(int i=0;i<3;i++) printf("%-2d",a[i]); } void min(int a[],int b) { for (int i=1;i<=b-1;i++) { for (int j=0;j<b-i;j++) { if(a[j]>a[j+1]) { int t; t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } }//为啥错误50%
zyj 2020-01-25 20:28:01 |
#include <stdio.h> void min(int a[],int b); main () { int a[3]; for(int i=0;i<3;i++) scanf("%d",&a[i]); min(a,3); int i; for(i=0;i<2;i++) printf("%d ",a[i]); printf("%d",a[i]); } void min(int a[],int b) { for (int i=0;i<b-1;i++) { for (int j=0;j<b-i;j++) { if(a[j]>a[j+1]) { int t; t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } }//为啥错误50%
zyj 2020-01-25 20:29:27 |
你把那个冒泡排序改一下,然后把那个输出改一下,改成先输出带空格地,最后一个输出不带空格地值
#include<stdio.h> int main() { int a,b,c,D,Z,X; scanf("%d%d%d",&a,&b,&c); D=(a>b?a:b)>c?(a>b?a:b):c; X=(a<b?a:b)<c?(a<b?a:b):c; Z=b>c?(b<a?a:(c>a?c:a)):(b>a?b:(a>c?c:a)); printf("%d %d %d\n",X,Z,D); return 0; } 为什么答案错误50?
未来 2019-08-04 17:21:24 |
我知道了=-=中间值错误
//C++求解,喜欢C++的可以参考下哈 #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int a; vector<int> vec; for(int i=0;i<3; i++) { cin>>a; vec.push_back(a); } sort(vec.begin(),vec.end()); for(int i=0; i<3; i++) cout<<vec[i]<<" "; return 0; }
刚以为是写复杂了 a作为中间数的时候 你的逻辑是错的 可以试试
湖畔读书人 2018-05-04 12:54:59 |
很感谢指出,的确是有误,错误的地方在(a<c?(b<c?b:c):(b>c?b:c)),应把(b<c?b:c)换成a即可,因为在后面的逻辑中a已经是不小于b了,如果再小于c输出a就可以了。
感觉中间数写的有点复杂了 a>b?(a<c?a:(b>c?c:b)):(a>c?a:(b>c?c:b)) 这样就好了
多输入输出练习1 (C语言代码)浏览:1219 |
C语言训练-大、小写问题 (C语言代码)浏览:792 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:564 |
A+B for Input-Output Practice (C语言代码)浏览:505 |
1118(求助_已解决)浏览:351 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:654 |
复数求和 (C语言代码)浏览:994 |
整除的尾数 (C语言代码)浏览:852 |
班级人数 (C语言代码)浏览:980 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:607 |