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

二、设计思路

(1)输入出生年份byear和目标年份中不同数字的个数dnum

(2)利用set容器不会重复插入相同元素的特点,将年份中的每个数字插入到set容器中

(3)比较set容器的size()和dnum

(4)若相同,输出当年年份-出生年份和当前年份

三、程序流程图

 

 

四、伪代码实现

五、代码实现

 1 #include <iostream>
 2 using namespace std;
 3 #include <iomanip>
 4 #include <set>
 5 int main()
 6 {
 7     int byear,dnum;
 8     cin>>byear>>dnum;
 9     for(int i=byear;;i++)
10     {
11         set<int>s;
12         int num=i;
13         for(int j=0;j<4;j++)
14         {
15             s.insert(num%10);
16             num=num/10;
17         }
18         if(s.size()==dnum)
19         {
20             cout<<i-byear<<' '<<setfill('0')<<setw(4)<<i;
21             break;
22         }
23     }
24     return 0;
25 }

 

六、总结

(1)set容器不会重复插入相同的元素,可以利用这一特点来统计一个数中不同元素的个数;

(2)setfill(’char‘)和setw(num)配合使用可以设置输出结果的宽度,setfill可以对空白处进行补录字符的操作;

(3)使用setfill和setw函数和setprecision函数需包含<iomanip>头文件;

(4)setprecision()函数可以控制输出结果的保留位数;

例  输出3.1415926

  setprecision(5)       结果3.1415;

  setprecision  (0)     结果3;

 setprecision(1)        结果3;

setprecision(2)         结果3.1;

    

 

posted @ 2023-04-13 09:29  连师傅只会helloword  阅读(53)  评论(0编辑  收藏  举报