以上是新浪微博中一奇葩贴:“我出生于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
import java.util.Scanner;
public class Main {
// 判断 year(最多4位数)是否恰好有n个数字不同,n可以是2, 3, 4
public static boolean isX(int year, int n) {
// 标记数字是否出现
int[] dif = new int[10];
int sum = 0;
int i = 0;
// 分割数字
while (year > 0) {
int k = year % 10;
year /= 10;
// 分割出数字 k,次数加 1
dif[k]++;
// 如果是第一次出现,则不同的数字个数加一
if (dif[k] == 1) {
sum++;
// 如果不同的数字个数大于n,不符合要求,退出
if (sum > n) {
return false;
}
}
// 总的数字个数加一
i++;
}
// 如果总数字个数小于4,且数字 0 没有出现过
// 则补0, 0出现次数加一
if (i < 4 && dif[0] == 0) {
sum++;
}
// 如果不同数字个数恰好等于 n,则返回 true
if (sum == n) {
return true;
}
return false;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int y = scanner.nextInt();
int n = scanner.nextInt();
int i = 0;
// 直到找到一个年份符合要求的年份
while (!isX(y + i, n)) {
i++;
}
System.out.printf("%d %04d", i, (y + i));
}
}