我这个C程序错在哪里啊,找不出啊

来源:百度知道 编辑:UC知道 时间:2024/06/08 10:27:27
已知给定20个四位数,并存入数组a中,要求求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数CNT,再把所有满足此条件的四位数依次存入数组bb中,然后对数组bb的四位数按小到大的顺序进行排序
这是我写的,error没有,但运行结果不对啊!大家帮帮忙啊!
#include<stdio.h>
void main()
{
int a[20],b[20],i,j,n,t,qian,bai,shi,ge;
for(i=0;i<20;i++)
{scanf("%d",a[i]);
}
for(i=0;i<20;i++)
{
qian=a[i]-a[i]%1000;
bai=a[i]-qian-a[i]%100;
shi=a[i]-qian-bai-a[i]%10;
ge=a[i]%10;
if(qian-bai-shi-ge>0)
n++;
b[n]=a[i];
}
for(j=0;j<=n;j++)
{
if(b[n]>b[n+1])
{b[n+1]=b[n];
t=b[n];
b[n]=t;
}
}
for(j=0;j<=n;j++)
{printf("%d",b[n]);
}
}
谢谢啦

第一:
qian=a[i]-a[i]%1000;
bai=a[i]-qian-a[i]%100;
shi=a[i]-qian-bai-a[i]%10;
ge=a[i]%10;
这里已经错了,比如说4321,qian=4321-321==4000,这是你要的数么?不是吧。
改成
qian=a[i]/1000;
bai=(a[i]/100)%10;
shi=(a[i]/10)%10;
ge=a[i]%10;
第二,n++里的n没有初始化。因该一开始就n=0;
第三,
if(qian-bai-shi-ge>0)
n++;
b[n]=a[i];
要加括号才能保证两句都被if所选择。而且顺序要反过来
if(qian-bai-shi-ge>0)

b[n]=a[i]; n++;
}这样才能保证是从b[0]开始的

第四,互换位置
if(b[n]>b[n+1])
{b[n+1]=b[n];
t=b[n];
b[n]=t;
}
不是这么换的,实际上这样只是把b[n+1]值变成了b[n],而且n是定值,j才是变量。所以应该这么写
if(b[j]>b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
第五,起泡法排序也不是这么排的应该有两个for循环:
for(i=0;i<n;i++){
for(j=1;j<n-i;j++)
{
if(b[i]>b[j])
{ t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
第六:输出
for(j=0;j<=n;j++)
printf("%d",b[n]);
不是这么输出的,n是常量,j才是变