C语言实验——各位数字之和排序
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定n个正整数,根据各位数字之和从小到大进行排序。
输入
输入数据有多组,每组数据占一行,每行的第一个数正整数n,表示整数个数,后面接n个正整数。当n为0时,不作任何处理,输入结束。
输出
输出每组排序的结果。
示例输入
2 1 2 3 121 10 111 0
示例输出
1 2 10 111 121
解题思路
我的思路是直接以字符串形式输入,这样循环访问比较简单。。。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int cmp(const void *a,const void *b);
int stonums(char arr[10000],int l);
int main ()
{
int n,l,i,j,num[1000],t;
char str[1000][1000],ch[1000];
while(scanf("%d",&n)!=EOF&&n){
for(i=0;i<n;i++)
{
scanf(" %s",str[i]);
l=strlen(str[i]);
num[i]=stonums(str[i],l);
//printf("%d ",stonums(str[i],l));
}
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
if(num[i]>num[j])
{
strcpy(ch,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],ch);
t=num[i];
num[i]=num[j];
num[j]=t;
}
}
for(i=0;i<n;i++)
{
printf("%s",str[i]);
if(i!=n-1)printf(" ");
else printf("\n");
}
}
return 0;
}
int stonums(char arr[10000],int l)
{
int sum=0,i;
for(i=0;i<l;i++)
{
sum+=arr[i]-'0';
}
return sum;
}