| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 730 人关注过本帖
标题:做 acm 遇到问题,求助
取消只看楼主 加入收藏
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:3 
做 acm 遇到问题,求助
自己运行正确,但是提交到测试系统一直都是错的,麻烦帮忙看看是哪里有问题.


题目:给定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[100] = {0};
    int b[100] = {0};
    int j, i;

    scanf("%d", &n);
    if(n<=0 || n>=100)
    {
        return 0;
    }
    else
    {
        for(i=0; i<n; i++)                         //输入
        {
        scanf("%d", &a[i]);

        if(a[i] <= 0 || a[i] >= 10000)
            return 0;

        }                                        


    for(i=0; i<n; i++)                        //求各个位数的数之和
    {
            temp = a[i];

            while(temp)
            {
                b[i] = b[i] + (temp%10);
                temp = temp/10;
            }
    }


    for(i=0; i<n-1; i++)                    //各个位数的数之和排序
    {
        for(j=0; j<n-i-1; j++)
        {
            if(b[j] > b[j+1])
            {
                m = b[j];
                b[j] = b[j+1];
                b[j+1] = m;

                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
                      //如果数字之和相同,就先输出数值小的那个数
        for(j=0; j<n-1; j++)
        {
            if(b[j] == b[j+1])
            {
                if(a[j] > a[j+1])
                {
                    t = a[j];
                    a[j] = a[j+1];
                    a[j+1] = t;
                }
            }
        }


    for(i=0; i<n; i++)        //输出
    {
        printf("%d\n", a[i]);
    }
    
    }

    return 0;
}
2014-05-10 14:44
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 2 楼 top398
之前这个部分用的也是冒泡,也还是不对
2014-05-10 15:35
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 4 楼 top398
嗯,我在多试试.谢谢
2014-05-10 15:57
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 7 楼 kwxx
我把二楼说的那个地方改了改,就可以了
程序代码:
                  //如果数字之和相同,就先输出数值小的那个数
    for(i=0;  i<n; i++)
    {
        for(j=0; j<n-1; j++)
        {
            if(b[j] == b[j+1])
            {
                if(a[j] > a[j+1])
                {
                    t = a[j];
                    a[j] = a[j+1];
                    a[j+1] = t;
                }
            }
        }
    }
2014-05-10 19:14
快速回复:做 acm 遇到问题,求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024865 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved