一道c程序题,帮忙看看,谢谢
本帖最后由 偶吼吼 于 2014-5-10 14:42 编辑自己运行正确,但是提交到测试系统一直都是错的,麻烦帮忙看看是哪里有问题.
题目:给定n个数字,按照数字的各个数位上数字的和从小到大排序。
如果数字之和相同,就先输出数值小的那个数.
input:
只有一组测试数据
第一行为一个n(n<100),然后n行,每行一个数字xi(0<xi<10000)。
ouput:
把xi按各个数字和从小到大排序。
# include <stdio.h>
# include <stdlib.h>
int main(void)
{
int n;
int t, m, temp;
int a = {0};
int b = {0};
int j, i;
scanf("%d", &n);
if(n<=0 || n>=100)
{
return 0;
}
else
{
for(i=0; i<n; i++) //输入
{
scanf("%d", &a);
if(a <= 0 || a >= 10000)
return 0;
}
for(i=0; i<n; i++) //求各个位数的数之和
{
temp = a;
while(temp)
{
b = b + (temp%10);
temp = temp/10;
}
}
for(i=0; i<n-1; i++) //各个位数的数之和排序
{
for(j=0; j<n-i-1; j++)
{
if(b > b)
{
m = b;
b = b;
b = m;
t = a;
a = a;
a = t;
}
}
}
//如果数字之和相同,就先输出数值小的那个数
for(j=0; j<n-1; j++)
{
if(b == b)
{
if(a > a)
{
t = a;
a = a;
a = t;
}
}
}
for(i=0; i<n; i++) //输出
{
printf("%d\n", a);
}
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct digit
{
int d, sum;
} *Digit;
void Bubble( Digit D, int n )
{
for( int i = 1; i < n; i++ )
{
for( int j = 0; j < n - i; j++ )
{
if( D.sum > D.sum )
{
// Swap
D.d ^= D.d ^= D.d ^= D.d;
D.sum ^= D.sum ^= D.sum ^= D.sum;
}
if( D.sum == D.sum && D.d > D.d )
{
// Swap
D.d ^= D.d ^= D.d ^= D.d;
D.sum ^= D.sum ^= D.sum ^= D.sum;
}
}
}
}
int main( void )
{
Digit D;
int n, temp;
scanf("%d", &n );
// memory allocation
D = ( Digit )malloc( n * sizeof( Digit ) );
for( int i = 0; i < n; i++ )
{
scanf("%d", &temp );
D.d = temp;
D.sum = temp % 10;
temp /= 10;
while( temp )
{
D.sum += temp % 10;
temp /= 10;
}
}
Bubble( D, n );
for( i = 0; i < n; i++ )
{
printf("%d ", D.d );
}
puts("");
return 0;
} ←_← 写的很水啊 O(∩_∩)O~#include<stdio.h>
int main()
{
int n;
int n2={0};
int i,j,t,k;
printf("Please Input a number(0~100):");
scanf("%d",&k);
if(k<0 || k>100)
{
printf("error!\n");
return 0;
}
printf("Please Input %d number(0~10000):",k);
for(i = 0;i<k;i++)
{
scanf("%d",&n);
}
for(i = 0;i<k;i++)
{
t = n;
while(t!=0)
{
n2 += t%10;
t /= 10;
}
}
for(i = 0;i<k;i++)//冒泡排序
{
for(j = i+1;j<k;j++)
{
if(n2>n2)
{
t = n2;
n2 = n2;
n2 = t;
t = n;
n = n;
n = t;
}
else if(n>n && n2==n2)
{
t = n2;
n2 = n2;
n2 = t;
t = n;
n = n;
n = t;
}
}
}
for(i = 0;i<k;i++)
{
printf("%-5d",n);
}
return 0;
} 牡丹花下死做鬼 发表于 2014-5-10 14:00 static/image/common/back.gif
←_← 写的很水啊 O(∩_∩)O~
是写的很水,,简单易懂啊,哈哈:handshake:handshake谢谢 HHR 发表于 2014-5-10 14:02 static/image/common/back.gif
这个看着高端{:2_40:}多谢多谢 偶吼吼 发表于 2014-5-10 15:42 static/image/common/back.gif
这个看着高端多谢多谢
算法说白了是和我一样的 新手一个,表示我写不出,不过你这个scanf("%d", &a); 肯定写错了,a是数组,你这么输入的话是一直在给a赋值,这肯定不是你想要的效果…… hanhaochi 发表于 2014-5-11 11:53 static/image/common/back.gif
新手一个,表示我写不出,不过你这个scanf("%d", &a); 肯定写错了,a是数组,你这么输入的话是一直在给a[ ...
本身程序有的,估计是没有复制过来 牡丹花下死做鬼 发表于 2014-5-10 16:46 static/image/common/back.gif
算法说白了是和我一样的
嗯嗯,我不太会用结构体
页:
[1]