| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1659 人关注过本帖
标题:组个最小数
只看楼主 加入收藏
逗比
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-10-31
结帖率:60%
收藏
已结贴  问题点数:4 回复次数:4 
组个最小数
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例1:
1 1 0 0 5 5 5 9
输出样例1:
10015558
搜索更多相关主题的帖子: 编写程序 编写程序 
2014-12-07 08:06
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:2 
以下是引用逗比在2014-12-7 08:06:54的发言:

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例1:
1 1 0 0 5 5 5 9
输出样例1:
10015558


按题目要求 你给出的样例是错误的结果 这是你随便写的 还是标准的答案我理解错了

Only the Code Tells the Truth             K.I.S.S
2014-12-07 14:33
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 longwu9t 于 2014-12-7 14:47 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2014-12-07 14:35
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int sNum[10];
int *pScanNum = sNum;

int comp(const void *p, const void*q) {
    return (*(char*)p - * (char*)q);
}

int scanNum(void) {
    int i;
    int s = 0;
L:

    for(i = 0; i < 10; i++) {
        scanf("%d", (pScanNum + i));
        s += *(pScanNum + i);

        if(s > 50) {
            s -= *(pScanNum + i);
            *(pScanNum + i) = 0;
            break;
        }
    }

    if(0 == s) {
        printf("不能少于一个非 0 数...请重新输入\n");
        goto L;
    }

    for(i = 0; i < 10; i++) {
        if(*(pScanNum + i) < 0) {
            printf("不能输入负数...请重新输入\n");
            s = 0;
            goto L;
        }
    }

    return s;
}

int main(void) {
    int i, j, k, sum, *pnum, *sortA, nozero = 0;
    sum = scanNum();
    pnum = (int*)malloc(sum * sizeof(int));

    for(i = 0; i < 10; i++) {
        for(j = 0; j < * (pScanNum + i); j++) {
            *(pnum + k) = i;
            k++;

            if(k == sum) {
                break;
            }
        }
    }

    for(i = 0; i < sum; i++) {
        if(*(pnum + i) != 0) {
            nozero++;
        }
    }

    sortA = (int*)malloc(nozero * sizeof(int));

    for(i = 0, j = 0; i < sum; i++) {
        if(*(pnum + i) != 0) {
            *(sortA + j) = *(pnum + i);
            j++;
        }
    }

    qsort(sortA, nozero, sizeof(int), comp);

    if(0 == (sum - *pScanNum)) {
        printf("最小数位数为1...值为: 0");

    } else {
        printf("最小数位数为%d...值为: %d", sum, *sortA);

        for(i = 0; i < (*pScanNum); i++) {
            printf("0");
        }

        for(i = 1; i < nozero; i++) {
            printf("%d", *(sortA + i));
        }
    }

    printf("\n");
    free(pnum);
    free(sortA);
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2014-12-07 15:10
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:2 
先将数字从小到大排列,如果第一个数字是0,将后面第一个不是0的数字与之交换。

[qq]949654600[/qq]
2014-12-09 17:01
快速回复:组个最小数
数据加载中...
 
   



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

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