团体程序设计天梯赛 L1-033 出生年

L1-033 出生年

题目链接-L1-033 出生年
在这里插入图片描述
输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001
解题思路

STL set

  • for循环从y遍历到3012,直到找到符合条件的为止
  • 因为y的范围为1-3000,最坏的情况就是y=3000,n=4时,所以3012是极限了
  • 利用STL里的set容器储存 i 的每一位,因为set容器里不能有相同元素,所以当set.size()==n时就说明数字 i 有n个不相同的数字,即 i 满足条件
  • 因为年份为四位数且数字中可能存在前导0,所以取每一位数字时用for(int j=0;j<4;j++),执行4次
  • 最后输出的时候用了setw()函数setfill()函数

主要讲讲这两个函数的做法和作用:
1. setw()函数仅对<<后的输出数据有效,setfill()函数则是跟在setw后面填充相应的空位
2. setfill()跟着setw()函数才有输出结果,且setw()只能一次有效,setfill()则永久有效,直到遇到下一个setfill()函数
3. setfill() 的参数只能是 <char>,setw(int n) n表示域宽,当后面输出的数据长度不够n时就用 setfill()里的char字符补满
4. setfill()setw() 在的头文件是<iomanip>
5. 在 setfill()与输出的数据之间加leftright分别表示向左或向右补齐
其实输出时直接可以用printf("%04d",i);就可以起到一样的作用,嘻嘻

附上代码
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	
	int y,n;
	cin>>y>>n;	
	for(int i=y;i<=3012;i++){
		set<int> s;
		int num=i;
		for(int j=0;j<4;j++){
			s.insert(num%10);
			num/=10;
		}
		if(s.size()==n){
			cout<<i-y<<" "<<setw(4)<<setfill('0')<<right<<i;
			break;
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值