输入4个整数,要求按从小到大顺序输出,

bbf222 2008-07-24 10:38:35
#include<stdio.h>
int main()
{
int a,b,c,d;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b){a=b-a;b=b-a;a=a+b;}
if(a>c){a=c-a;c=c-a;a=a+c;}
if(a>d){a=d-a;d=d-a;a=a+d;}
if(b>c){b=c-b;c=c-b;b=b+c;}
if(b>d){b=d-b;d=d-b;b=b+d;}
if(c>d){c=d-c;d=d-c;c=c+d;}
printf("%d,%d,%d,%d\n",a,b,c,d);
getch();
return 0;
}
我想知道 为什么交换数值就能达到目的啊,高手指教啊,期待中```
...全文
2311 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
别人写的,如果看不明白的话,就用纸和笔,画一下就ok了!~
e_sharp 2008-07-25
  • 打赏
  • 举报
回复
冒泡
yuhaozx 2008-07-25
  • 打赏
  • 举报
回复
if(a>b){a=b-a;b=b-a;a=a+b;}
if(a>c){a=c-a;c=c-a;a=a+c;}
if(a>d)
如条件都成立,a会跟比较的变量交换,依次类推会至底。
直至执行完程序
skybate 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ChamPagneZ 的回复:]
其实就是个冒泡排序~
[/Quote]
aozhi 2008-07-25
  • 打赏
  • 举报
回复
不推荐这么用,还要考虑进位问题。
不如用a=a^b;b=a^b;a=a^b;
fallening 2008-07-25
  • 打赏
  • 举报
回复
#include <iterator>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
vector<int> vec;

copy( istream_iterator<int>(cin),
istream_iterator<int>(),
back_inserter(vec) );
sort( vec.begin(), vec.end() );
copy( vec.begin(), vec.end(),
ostream_iterator<int>(cout, " ") );

return 0;
}
iBug168 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ChamPagneZ 的回复:]
其实就是个冒泡排序~
[/Quote]
ForestDB 2008-07-25
  • 打赏
  • 举报
回复
把2和1,按从小到大排序,你怎么做?
交换一下2和1,变成1和2就成了。
sgsun 2008-07-24
  • 打赏
  • 举报
回复
#INLUDE<STDIO.H>
#DEFINE SIZE 4
INT A[SIZE];
VOID SORT4(INT [],INT);
VOID DISP(INT [],INT);
INT MAIN(VOID)
{
PUTS("INPUT FOUR INTEGERS:");
FOR(INT I=0;I<4;I++)
SCANF("%D",&A[I]);
SORT4(A);
DISP(A);
RETURN 0;
}

VOID SORT4(INT B[],INT N)
{
INT TEMP;
FOR(INT I=0;I<N-1;I++)
FOR(INT J=I+1;J<N;J++)
IF(A[I]<A[J]){
TEMP=A[I];
A[I]=A[J];
A[J]=TEMP;
}
RETURN;
}

VOID DISP(INT B[],INT N)
{
INT I;
FOR(I=0;I<N;I++)
{
IF(I%10==0)PUTCHAR('\N');
PRINTF("%D ",A[I]);
}
RETURN;
}
ChamPagneZ 2008-07-24
  • 打赏
  • 举报
回复
其实就是个冒泡排序~
bbf222 2008-07-24
  • 打赏
  • 举报
回复
我的问题是 为什么交换数值就能达到题目要求的目的,
怎么交换数值我能看懂的,谢谢1楼啦
ChamPagneZ 2008-07-24
  • 打赏
  • 举报
回复

if(a>b){a=b-a;b=b-a;a=a+b;} ;
//b=b-a=b-(b-a)=a;
//a=(b-a)+a=b;
//自己划划就出来了

70,013

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧