|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- int main()
- {
- int n;scanf("%d",&n);int a[n],b[n];
- int i,j,temp=0;
- for(i=0;i<n;i++)
- {
- scanf("%d",&a[i]);
- }
- for(i=0;i<n;i++)//这个循环求出a[i]的各位之和 ---b[i]
- {
- temp=a[i];
- for(;temp!=0;)
- {
- b[i]+=temp%10;
- temp/=10;
- }
- printf("%d\n",b[i]);
- }
- for(i=0;i<n;i++) //以b[j]为比较给a[j],b[j]排序
- {
- for(j=0;j<n-1;j++)
- {
- if(b[j]>b[j+1])
- {
- temp=b[j];
- b[j]=b[j+1];
- b[j+1]=temp;
- temp=a[j];
- a[j]=a[j+1];
- a[j+1]=temp;
-
- }
- }
- }
- for(j=0;j<n-1;j++) //出现b[i]==b[i+1]这类情况是比较a[i]谁小谁在前
- {
- if(b[j]==b[j+1]&&a[j]>a[j+1])
- {
- temp=b[j];
- b[j]=b[j+1];
- b[j+1]=temp;
- temp=a[j];
- a[j]=a[j+1];
- a[j+1]=temp;
- }
- }
- for(i=0;i<n;i++)
- {
- printf("%d %d\n",a[i],b[i]);//最后b[i]由小到大 的顺序输出
- }
- return 0;
-
- }
复制代码
给定n个整数,请计算每个整数各位数字和,按各位数字和从小到大的顺序输出。
本帖最后由 jackz007 于 2022-11-19 12:47 编辑
b[ i ] 累加前没有初始化
- temp = a[i] ;
- for(b[i] = 0 ; temp != 0 ;) // 修改这一句,累加前,必须先把 b[i] 初始化为 0 值,非常很重要!你代码问题的病根在此。
- {
- b[i]+=temp%10;
- temp/=10;
- }
复制代码
还有这里
- if(b[j]==b[j+1]&&a[j]>a[j+1])
- {
- temp=b[j]; // 既然 b[j] == b[j + 1],那么,这又是在干什么呢?还有必要交换吗?
- b[j]=b[j+1]; // 既然 b[j] == b[j + 1],那么,这又是在干什么呢?还有必要交换吗?
- b[j+1]=temp; // 既然 b[j] == b[j + 1],那么,这又是在干什么呢?还有必要交换吗?
- temp=a[j];
- a[j]=a[j+1];
- a[j+1]=temp;
- }
复制代码
这是我修改的代码,谨供楼主参考
- #include<stdio.h>
- int main(void)
- {
- int i , j , k , n ;
- scanf("%d", & n) ;
- int a[n] , b[n] ;
- for(i = 0 ; i < n ; i ++) {
- scanf("%d", & a[i]) ;
- for(b[i] = 0 , k = a[i] ; k ; k /= 10) b[i] += k % 10 ;
- }
- for(i = 0 ; i < n - 1 ; i ++) {
- for(j = 1 ; j < n - i ; j ++) {
- if(b[j] < b[j - 1]) {
- k = b[j - 1] ;
- b[j - 1] = b[j] ;
- b[j] = k ;
- }
- }
- }
- /*
- printf("%d" , a[0]) ;
- for(i = 1 ; i < n ; i ++) printf(" %d" , a[i]) ;
- printf("\n") ;
- */
- printf("%d" , b[0]) ;
- for(i = 1 ; i < n ; i ++) printf(" %d" , b[i]) ;
- printf("\n") ;
- }
复制代码
|
|