| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 730 人关注过本帖
标题:做 acm 遇到问题,求助
只看楼主 加入收藏
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:12 
做 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
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:10 
        //如果数字之和相同,就先输出数值小的那个数
        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;
                }
            }
        }
以后面这一段来说,如果有3个数其各位数字和都相同,则你的排序算法能保证这3个数是按数值从小到大输出么?
2014-05-10 15:04
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 2 楼 top398
之前这个部分用的也是冒泡,也还是不对
2014-05-10 15:35
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
关键是 b 虽然冒泡了,但 a 却未必。
你重点测试一下输入多个各位数字和相等但数值不等的数吧。
2014-05-10 15:40
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 4 楼 top398
嗯,我在多试试.谢谢
2014-05-10 15:57
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:10 
# 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] || b[j] == b[j+1] && a[j] > a[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(i=0; i<n; i++)        //输出
    {
        printf("%d\n", a[i]);
    }
   
    }

    return 0;
}
2014-05-10 16:41
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
另外:不知题目要求输出格式不?你注意一下。很少像你这样一行一个数据输出,一般但都是在一行上,用空格隔开。
2014-05-10 16:46
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
楼上有没有测试:
输入多个各位数字和相等但数值不等的数。
2014-05-10 18:53
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
回复 8 楼 top398
测试了,还刻意输入了,如 123 321 等数字。怎么了,有什么问题吗?
2014-05-10 19:03
岑吼吼
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.030559 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved