|
|
2鱼币
本帖最后由 偶吼吼 于 2014-5-10 14:42 编辑
自己运行正确,但是提交到测试系统一直都是错的,麻烦帮忙看看是哪里有问题.
题目:给定n个数字,按照数字的各个数位上数字的和从小到大排序。
如果数字之和相同,就先输出数值小的那个数.
input:
只有一组测试数据
第一行为一个n(n<100),然后n行,每行一个数字xi(0<xi<10000)。
ouput:
把xi按各个数字和从小到大排序。
# include <stdio.h>
# include <stdlib.h>
int main(void)
{
int n;
int t, m, temp;
int a[100] = {0};
int b[100] = {0};
int j, i;
scanf("%d", &n);
if(n<=0 || n>=100)
{
return 0;
}
else
{
for(i=0; i<n; i++) //输入
{
scanf("%d", &a);
if(a <= 0 || a >= 10000)
return 0;
}
for(i=0; i<n; i++) //求各个位数的数之和
{
temp = a;
while(temp)
{
b = b + (temp%10);
temp = temp/10;
}
}
for(i=0; i<n-1; i++) //各个位数的数之和排序
{
for(j=0; j<n-i-1; j++)
{
if(b[j] > b[j+1])
{
m = b[j];
b[j] = b[j+1];
b[j+1] = m;
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
//如果数字之和相同,就先输出数值小的那个数
for(j=0; j<n-1; j++)
{
if(b[j] == b[j+1])
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for(i=0; i<n; i++) //输出
{
printf("%d\n", a);
}
}
return 0;
}
|
|