问题描述:
给定只包含字符'0'-'9'的字符串S,找出无法用字符串中数字表示的最小正整数。例如S="123456789",输出10;S="0123456789123456789",输出100;S="11",输出2;S="0123456789",输出11;S="0011223344566778899",输出55。
解题思路:
关键代码:
/*************************************************/
/* 作者:codeology
/* 时间:2018-03-18
/* 说明:在只包含'0'-'9'的字符串中找出无法
/* 用字符串中数字表示的最小正整数
/* 变量:i,j,k ---> 索引下标
/* temp ---> 辅助变量
/* a[10] ---> 辅助数组
/* min ---> 目标数
/* S ---> 字符串数组
/*************************************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
#define size 1000
int main()
{
int i, j, k, temp, min;
int a[10];
char S[size];
//输入S和初始化a[10]
scanf("%s", S);
for(i = 0; i < 10; i++)
a[i] = 0;
k = strlen(S);
//记录每个字出现的次数
for(i = 0; i < k; i++)
a[S[i] - '0']++;
//找出出现次数最少的数,并记录出现次数
temp = a[0];
k = 0;
for(i = 1; i < 10; i++)
{
if(a[i] < temp)
{
temp = a[i];
k = i;
}
}
temp++;
min = pow(10, temp);
//按情况输出
if(k == 0)
{
for(j = 1; j < 10; j++)
{
if(a[j] == temp - 1)
{
k = j;
break;
}
}
if(k == 0)
printf("%d", min);
}
if(k != 0)
{
min = k;
for(i = 1; i < temp; i++)
{
min = min * 10 + k;
}
printf("%d", min);
}
return 0;
}
测试结果: