2018年3月美团春招笔试题 数字字符
【摘要】
题目:
数字字符
时间限制:C/C++语言 2000MS;其他语言 4000MS内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
在十进制表示中,任意一个正整数都可以用字符‘0’-‘9’表示出来。但是当‘0’-‘9’这些字符每种字符的数量有限时,可能有些正整数就无法表示出来了。比如你有两个‘1’ ,一个...
题目:
数字字符
时间限制:C/C++语言 2000MS;其他语言 4000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
在十进制表示中,任意一个正整数都可以用字符‘0’-‘9’表示出来。但是当‘0’-‘9’这些字符每种字符的数量有限时,可能有些正整数就无法表示出来了。比如你有两个‘1’ ,一个‘2’ ,那么你能表示出 11,12,121 等等,但是无法表示出 10,122,200 等数。
现在你手上拥有一些字符,它们都是‘0’-‘9’的字符。你可以选出其中一些字符然后将它们组合成一个数字,那么你所无法组成的最小的正整数是多少?
输入
第一行包含一个由字符’0’-‘9’组成的字符串,表示你可以使用的字符。
· 1 ≤字符串长度≤ 1000
输出
输出你所无法组成的最小正整数。
样例输入
55
样例输出
1
Hint
Input Sample 2
123456789
Output Sample 2
10
思路:
贪心
最后的答案要不就是10^n的形式,要不就是每一位都是相同的数字。
代码:
-
#include<iostream>
-
#include<string.h>
-
using namespace std;
-
int main()
-
{
-
char c[1001];
-
int su = 0, num[10];
-
for (int i = 0; i < 10; i++)num[i] = 0;
-
cin >> c;
-
int len = strlen(c);
-
for (int i = 0; i < len; i++)num[c[i] - '0']++;
-
for (int i = 1; i <= 9; i++)if (!num[i])
-
{
-
cout << i;
-
return 0;
-
}
-
if (!num[0])
-
{
-
cout << 1 << 0;
-
return 0;
-
}
-
int minn = 10000;
-
for (int i = 0; i <= 9; i++)if (minn > num[i])minn = num[i];
-
for (int i = 1; i <= 9; i++)if (num[i] == minn)
-
{
-
while (minn--)cout << i ;
-
cout << i;
-
return 0;
-
}
-
cout << 1;
-
while (minn--)cout << 0;
-
cout << 0;
-
return 0;
-
}
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/79660632
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)