做 acm 遇到问题,求助
自己运行正确,但是提交到测试系统一直都是错的,麻烦帮忙看看是哪里有问题.题目:给定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[i]); if(a[i] <= 0 || a[i] >= 10000) return 0; } for(i=0; i<n; i++) //求各个位数的数之和 { temp = a[i]; while(temp) { b[i] = b[i] + (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[i]); } } return 0; }