求大神解答一下C语言问题?
题目6:数字排序问题描述给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。输入格式输入的第一行包含一个整数n,表示给定数字的个数。第二行包含n个整数...
题目6:数字排序
问题描述
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
样例输入
5
101 100 999 1234 110
样例输出
999 27
1234 10
101 2
110 2
100 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过10000的非负整数。
我的代码
#include<stdio.h>
int main()
{
int n,i,j,t,m,x,y;
int a[1000];
int b[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
for(j=a[i],b[i]=0;j!=0;j=j/10)
{
b[i]+=j%10;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(b[j+1]>b[j])
{
t=b[j];
m=a[j];
b[j]=b[j+1];
a[j]=a[j+1];
b[j+1]=t;
a[j+1]=m;
}
}
}
for(i=0;i<n;i++){
if(b[i]==b[i+1]&&a[i+1]<a[i])
{
x=b[i];
y=a[i];
b[i]=b[i+1];
a[i]=a[i+1];
b[i+1]=x;
a[i+1]=y;
}
}
for(i=0;i<n;i++)
printf("%d %d\n",a[i],b[i]);
return 0;
} 展开
问题描述
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
样例输入
5
101 100 999 1234 110
样例输出
999 27
1234 10
101 2
110 2
100 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过10000的非负整数。
我的代码
#include<stdio.h>
int main()
{
int n,i,j,t,m,x,y;
int a[1000];
int b[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
for(j=a[i],b[i]=0;j!=0;j=j/10)
{
b[i]+=j%10;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(b[j+1]>b[j])
{
t=b[j];
m=a[j];
b[j]=b[j+1];
a[j]=a[j+1];
b[j+1]=t;
a[j+1]=m;
}
}
}
for(i=0;i<n;i++){
if(b[i]==b[i+1]&&a[i+1]<a[i])
{
x=b[i];
y=a[i];
b[i]=b[i+1];
a[i]=a[i+1];
b[i+1]=x;
a[i+1]=y;
}
}
for(i=0;i<n;i++)
printf("%d %d\n",a[i],b[i]);
return 0;
} 展开
1个回答
展开全部
不过程序可以简化的:
#include<stdio.h>
int main()
{ int n,i,j,t,m,a[1000],b[1000]={0};
scanf("%d",&n);
for(i=0; i<n; i++)
{ scanf("%d",&a[i]);
空大 for(j=a[i]; j!=0; j/=10)
{ b[i]+=j%10;
}
}
for(i=0; i<n-1; i++)
{ for(j=0; j<n-i-1; j++)
{ if(b[j+1]>b[j]||b[j]==b[j+1]&&a[j+1]<a[j])
{ t=b[j];
宏亏顷蔽陆 m=a[j];
b[j]=b[j+1];
a[j]=a[j+1];
b[j+1]=t;
a[j+1]=m;
}
}
}
for(i=0; i<n; i++)
printf("%d %d\n",a[i],b[i]);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询