原来是我错付了 发表于 2022-11-19 11:38:36

为什么某数的各位和计算会有问题

#include<stdio.h>
int main()
{
        int n;scanf("%d",&n);int a,b;
        int i,j,temp=0;
        for(i=0;i<n;i++)
        {
                scanf("%d",&a);
        }
        for(i=0;i<n;i++)//这个循环求出a的各位之和 ---b
        {
                temp=a;
                for(;temp!=0;)
                {
                        b+=temp%10;
                        temp/=10;
                }
                printf("%d\n",b);
        }
        for(i=0;i<n;i++)   //以b为比较给a,b排序
        {
                for(j=0;j<n-1;j++)
                {
                        if(b>b)
                        {
                                temp=b;
                                b=b;
                                b=temp;
                                temp=a;
                                a=a;
                                a=temp;
                               
                        }
                }
        }
        for(j=0;j<n-1;j++)    //出现b==b这类情况是比较a谁小谁在前
        {
                if(b==b&&a>a)
                {
                                temp=b;
                                b=b;
                                b=temp;
                                temp=a;
                                a=a;
                                a=temp;
                }
        }
        for(i=0;i<n;i++)
        {
                printf("%d %d\n",a,b);//最后b由小到大 的顺序输出
        }
        return 0;
       
}
给定n个整数,请计算每个整数各位数字和,按各位数字和从小到大的顺序输出。

jackz007 发表于 2022-11-19 12:12:42

本帖最后由 jackz007 于 2022-11-19 12:47 编辑

             b[ i ] 累加前没有初始化
                temp = a ;
                for(b = 0 ; temp != 0 ;)// 修改这一句,累加前,必须先把 b 初始化为 0 值,非常很重要!你代码问题的病根在此。
                {
                        b+=temp%10;
                        temp/=10;
                }
            还有这里
                if(b==b&&a>a)
                {
                              temp=b;            // 既然 b == b,那么,这又是在干什么呢?还有必要交换吗?
                              b=b;          // 既然 b == b,那么,这又是在干什么呢?还有必要交换吗?
                              b=temp;          // 既然 b == b,那么,这又是在干什么呢?还有必要交换吗?
                              temp=a;
                              a=a;
                              a=temp;
                }
          这是我修改的代码,谨供楼主参考
#include<stdio.h>
int main(void)
{
      int i , j , k , n                                              ;
      scanf("%d", & n)                                             ;
      int a , b                                                ;
      for(i = 0 ; i < n ; i ++) {
                scanf("%d", & a)                                    ;
                for(b = 0 , k = a ;k ; k /= 10) b += k % 10 ;
      }
      for(i = 0 ; i < n - 1 ; i ++) {
                for(j = 1 ; j < n - i ; j ++) {
                        if(b < b) {
                              k = b                           ;
                              b = b                        ;
                              b = k                               ;
                        }
                }
      }
/*
      printf("%d" , a)                                          ;
      for(i = 1 ; i < n ; i ++) printf(" %d" , a)               ;
      printf("\n")                                                   ;
*/
      printf("%d" , b)                                          ;
      for(i = 1 ; i < n ; i ++) printf(" %d" , b)               ;
      printf("\n")                                                   ;
}

原来是我错付了 发表于 2022-11-19 15:44:31

jackz007 发表于 2022-11-19 12:12
b[ i ] 累加前没有初始化

            还有这里


按你的提示修改后,程序对了,但是在学校系统上提交后,总有一个用例过不了。程序的哪里有问题,我把
b ==b==b的情况下a的排序也考虑了,加入后也不对。

给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
  输入的第一行包含一个整数n,表示给定数字的个数。
  第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
  输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。

原来是我错付了 发表于 2022-11-19 15:45:23

#include<stdio.h>
int main()
{
        int n;scanf("%d",&n);int a,b;
        int i,j,temp=0;
        for(i=0;i<n;i++)
        {
                scanf("%d",&a);
        }
        for(i=0;i<n;i++)//这个循环求出a的各位之和 ---b
        {
                b=0;   //因为没有初始化数组这一步,最初一个小时没做出来。
                temp=a;
                for(;temp!=0;)
                {
                        b+=temp%10;
                        temp/=10;
                }
        }
        for(i=0;i<n;i++)   //以b为比较给a,b排序
        {
                for(j=0;j<n-1;j++)
                {
                        if(b<b)
                        {
                                temp=b;
                                b=b;
                                b=temp;
                                temp=a;
                                a=a;
                                a=temp;
                               
                        }
                }
        }
        for(j=0;j<n-1;j++)    //出现b==b这类情况是比较a谁小谁在前
        {
                if(b==b&&a>a)
                {
                                temp=a;
                                a=a;
                                a=temp;
                }
        }
        for(j=0;j<n-2;j++)
        {
                if(b==b&&b==b)//条件不能有两个连等,必须分开写。
                {
                        if(b>b)
                        {
                                temp=b;b=b;b=temp;
                        }
                        if(b>b)
                        {
                                temp=b;b=b;b=temp;
                        }
                        if(b>b)
                        {
                                temp=b;b=b;b=temp;
                        }
                }
        }
        for(i=0;i<n;i++)
        {
                printf("%d %d\n",a,b);
        }
        return 0;
       
}

jackz007 发表于 2022-11-19 15:47:51

本帖最后由 jackz007 于 2022-11-19 16:14 编辑

原来是我错付了 发表于 2022-11-19 15:45

      也不早一点贴要求
#include<stdio.h>
int main(void)
{
      int i , j , k , n                                              ;
      scanf("%d", & n)                                             ;
      int a , b                                                ;
      for(i = 0 ; i < n ; i ++) {
                scanf("%d", & a)                                    ;
                for(b = 0 , k = a ;k ; k /= 10) b += k % 10 ;
      }
      for(i = 0 ; i < n - 1 ; i ++) {
                for(j = 1 ; j < n - i ; j ++) {
                        if(b > b) {
                              k = b                           ;
                              b = b                        ;
                              b = k                               ;
                        }
                        if(b == b && a < a) {
                              k = a                           ;
                              a = a                        ;
                              a = k                               ;
                        }
                        
                }
      }
      for(i = 0 ; i < n ; i ++) printf("%d %d\n" , b , a)      ;
}
      编译运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
5
123 321 222 141 132
6 123
6 132
6 141
6 222
6 321

D:\\C>x
6
321 567 231 135 432 111
18 321
9 231
9 567
6 135
6 432
3 111

D:\\C>
页: [1]
查看完整版本: 为什么某数的各位和计算会有问题