有关南开100题的一点疑问?

来源:百度知道 编辑:UC知道 时间:2024/05/17 02:48:31
题目6:在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列
下面是答案:
void jsSort()

{

int i,j,data;

for(i=0;i<199;i++)

for(j=i+1;j<200;j++)
有疑问的地方:题目说如果后三位的数值相等,则按原先的数值进行升序排列,但是答案为什么aa[i]%1000==aa[j]%1000&&aa[i]>aa[j]在这个条件下也交换啊?那不就是按降序排列了吗?

if(aa[i]%1000<aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]>aa[j])

{data=aa[i];aa[i]=aa[j];aa[j]=data;}

for(i=0;i<10;i++)

bb[i]=aa[i];

}

题目要求:
如果后三位的数值相等,则按原先的数值进行升序排列

aa[i]%1000==aa[j]%1000就是后三位数相等啊。所以就是要按照升序排列,只是是按照原来数,所以是aa[i]>aa[j]!

就可读性而言:还是把后边两个条件加上括号好些。虽然&&优先级高于||
aa[i]%1000<aa[j]%1000||
(aa[i]%1000==aa[j]%1000&&aa[i]>aa[j]))