以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y
年,直到x
岁才遇到n
个数字都不相同的年份”这句话。
输入格式:
输入在一行中给出出生年份y
和目标年份中不同数字的个数n
,其中y
在[1, 3000]之间,n
可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。
输出格式:
根据输入,输出x
和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n
个数字都不相同”是指不同的数字正好是n
个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。
输入样例1:
1988 4
输出样例1:
25 2013
输入样例2:
1 2
输出样例2:
0 0001
思路:将年份用sprintf控制格式为%04d转化成字符串,再用个函数计算有几个数字不同,遍历找出符合条件的年份......
1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4 int jisuan(char str[]);
5 int main()
6 {
7 char str[5];
8 int year,n;
9 int count=0;
10 cin>>year>>n;
11 sprintf(str,"%04d",year);
12 int n1=jisuan(str);
13 if(n1==n)
14 {
15 cout<<count<<" "<<str<<endl;
16 return 0;
17 }
18 while(n1!=n)
19 {
20 year++;
21 count++;
22 sprintf(str,"%04d",year);
23 n1=jisuan(str);
24 }
25 cout<<count<<" "<<str<<endl;
26 return 0;
27 }
28 int jisuan(char str[])
29 {
30 int num[10];
31 memset(num,0,sizeof(num));
32 for(int i=0;i<strlen(str);i++)
33 {
34 num[str[i]-'0']++;
35 }
36 int count=0;
37 for(int i=0;i<10;i++)
38 if(num[i])
39 count++;
40 return count;
41 }