Total Submissions: 335 (79 users) Accepted: 52 (46 users)
[ My Solution ]
每个人都有自己喜欢的数字。 若一个人喜欢的数字为4和7, 那么我们认为所有只由4和7构成的正整数都为他的幸运数字, 例如: 44, 7, 477都是幸运数字, 而14, 70都不是幸运数字。 这道题目的要求为, 给定一个正整数k, 和n个幸运数字ai (0 <= ai <= 9), 需要你求出大于k的最小幸运数字。
输入的第一行有一个整数n (1 <= n <= 10), 接下来的一行有n个互不相同的整数ai (0 <= ai <= 9), 代表了幸运数字, 再接下来的一行有一个整数k (1 <= k <= 1,000,000,000,000,000,000)。
输出一个大于k的最小幸运数字, 若答案不存在, 则输出"Impossible"。
2
4 7
48
74
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
while(cin>>n){
int j,i,min1=100,min2=1000,num[12];
for(i=0;i<n;i++)
{ cin>>num[i]; min1=min1>num[i]?num[i]:min1;
if(num[i]!=0)
min2=min2>num[i]?num[i]:min2;
}
char s[20];
cin>>s;
int len=strlen(s),count=0;
char out[20];
if(min1==0&&n==1)
cout<<"Impossible"<<endl;
else
{
for(i=0;i<len;i++)
{
int flag=0,min=1000;
for( j=0;j<n;j++)
{
if(num[j]==(s[i]-'0')&&i!=len-1)
min=min>num[j]?num[j]:min;
if(i==len-1)
if(num[j]>(s[i]-'0'))
min=min>num[j]?num[j]:min;
}
if(min==1000)
{
for(int k=i;k>=0;k--)
{
for(int l=0;l<n;l++){
if(num[l]>(s[k]-'0'))
{
min=min>num[l]?num[l]:min;
}
}
if(min!=1000)
{
out[count++]=(char)(min+'0');
flag=1; break;
}
count--;
}
}
if(flag||count<0)
{
if(count<0) {
count=0;
if(min1==0)
{
out[count++]=(char)(min2+'0');
for(j=1;j<=len;j++)
out[count++]=(char)(min1+'0');
}
else
for(j=0;j<=len;j++)
out[count++]=(char)(min1+'0');
}
else
for(j=count;j<len;j++)
out[count++]=(char)(min1+'0');
break;
}
else
out[count++]=(char)(min+'0');
}
out[count]='\0';
cout<<out<<endl;
}
}
return 0;
}