为什么某数的各位和计算会有问题
#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: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") ;
} jackz007 发表于 2022-11-19 12:12
b[ i ] 累加前没有初始化
还有这里
按你的提示修改后,程序对了,但是在学校系统上提交后,总有一个用例过不了。程序的哪里有问题,我把
b ==b==b的情况下a的排序也考虑了,加入后也不对。
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
#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 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]