山理工 一道简单水题 各位数字之和排序 1188 醉了

//先附上题目链接https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/1188.html

//初始想法很简单,用结构体数组来做,简单测试了几组例子后感觉没问题,但是oj一直wrong answer,
//这就烦了,便开始 输入 3 10 32 20  结果应该是 10 20 32 但是当第二次还是输入 3 10 32 20 的时候
//发现结果错了  最后发现应该是每次输入之前没有初始化数组 
//加上  memset(a, 0, sizeof(number)*10); AC了

#include
#include
#include
#include
#include
using namespace std;
struct number
{   
	int score;
	int sum = 0;
}a[10],temp[1];
int main()
{
	int n,i,j;
    int flag,m;
	while (scanf("%d", &n) != EOF)
	{
		memset(a, 0, sizeof(number)*10);
		if (n != 0)
		{
			for (i = 0; i < n; i++)
			{
				scanf("%d", &a[i].score);
				flag = a[i].score;
				while (flag)
				{
					m = flag % 10;
					a[i].sum += m;
					flag = flag / 10;
				}
			}
			for (i = 0; i < n-1; i++)
			{
				for (j = 0; j < n -i-1; j++)
				{
					if (a[j].sum>a[j + 1].sum)
					{
						temp[0] = a[j];
						a[j] = a[j + 1];
						a[j + 1] = temp[0];
					}
				}
			}
			for (i = 0; i < n-1; i++)
			{
				printf("%d ", a[i].score);
			}
			printf("%d\n", a[n - 1].score);
		}
		else
		{
			break;
		}
	}	
   	return 0;
}


你可能感兴趣的:(基础练习)