组个最小数
组个最小数
阿豪boy 发表于11个月前
组个最小数
  • 发表于 11个月前
  • 阅读 23
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

https://www.patest.cn/contests/pat-b-practise/1023

给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:

每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。

输出格式:

在一行中输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

输出样例:

10015558

 

#include <iostream>
#include <cstdio>
using namespace std;

int cnt[10]={0};	//每个数字出现的次数 

//需要输出第几个数字 
void dfs(int n){
	if(n==11) return;
	if(n==1){
		for(int i=1;i<10;i++)
			if(cnt[i]>0){
				printf("%d",i);
				cnt[i]--;
				dfs(n+1);
			}
	}else{
		for(int i=1;i<10;i++)
			if(cnt[i]>0){
				printf("%d",i);
				cnt[i]--;
				dfs(n+1);
			}
	} 
 
} 
int main(int argc, char *argv[])
{
	int t;
	for(int i=0;i<10;i++){
		scanf("%d",&t);
		cnt[i]=t;
	}
	for(int i=1;i<10;i++)
		if(cnt[i]>0){
			printf("%d",i);
			cnt[i]--;
			break;
		} 
	for(int i=0;i<10;i++){
		while(cnt[i]>0){
			printf("%d",i);
			cnt[i]--;
		} 
	}
 
	printf("\n");		
	return 0;
}

 

共有 人打赏支持
粉丝 5
博文 516
码字总数 393207
×
阿豪boy
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: