来源
西电XDOJ在线C语言练习题6
问题描述
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
解题思路
1.输入n和数列a[n];
2.算出数列中每一个数的各位和记作b[n];
3.将b[n]从小到大排列顺便排a[n],但是遇到相等的要判断a[n]的大小;
4.输出a[n];
代码实现
#include<stdio.h>
int main(){
int a[1000];
int i,j,k,o,count,m,n;
scanf("%d",&count);
for ( i = 0; i < count; i++)
{
scanf("%d",&a[i]);
}
int b[1000]={0};
for ( j = 0; j < count; j++) //算出各位和
{
int n=a[j];
b[j]=0;
while (n>0)
{
b[j]=b[j]+n%10;
n=n/10;
}
}
for ( m = 0; m < count-1; m++) //排序
{
for ( n = 0; n < count-1-m; n++)
{
if (b[n]<b[n+1])
{
k=b[n];
o=a[n];
b[n]=b[n+1];
a[n]=a[n+1];
b[n+1]=k;
a[n+1]=o;
}else if (b[n]==b[n+1]&&a[n]>a[n+1])
{
o=a[n];
a[n]=a[n+1];
a[n+1]=o;
}
}
}
for (int l = 0; l < count; l++)
{
printf("%d %d\n",a[l],b[l]);
}
return 0;
}