L1-033 出生年 (15分)

以上是新浪微博中一奇葩貼:“我出生于 \(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
代碼:
#include<bits/stdc++.h>
using namespace std;
int y,n,tot;
bool vis[15];
int main()
{
cin>>y>>n;
for(int i=y;i<=9999;i++)
{
memset(vis,0,sizeof(vis));
tot=0;
for(int j=1;j<=1000;j*=10)
if(!vis[i/j%10])tot+=vis[i/j%10]=1;
if(tot==n)return cout<<i-y<<' '<<setw(4)<<setfill('0')<<i<<endl,0;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/6525.html
標籤:C++
下一篇:L1-034 點贊 (20分)
