L1-033 出生年

以上是新浪微博中一奇葩贴:“我出生于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 }
大佬见笑,,
原文地址:https://www.cnblogs.com/xwl3109377858/p/10305441.html