L1-033. 出生年


                                                              L1-033. 出生年

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
陳越

以上是新浪微博中一奇葩貼:“我出生於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


思路:從起始那一年開始尋找合適的年份,窮竭搜索。每一次的判斷方式:用Hash數組,提取出當前的年份的四個數碼,記錄好這四個數碼出現的次數,之后判斷是否這四個數碼都不相同,如果是的話找到了正確年份並結束循環。
AC代碼:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int num[4];
int all[10];
int main() {
  int Y, N;
  int first;
  while (scanf("%d%d", &Y, &N) != EOF) {
    first = Y;
    while (1) {
      num[0] = Y / 1000;
      num[1] = Y / 100 % 10;
      num[2] = Y / 10 % 10;
      num[3] = Y % 10;
      for (int i = 0; i < 4; i++) {
          all[num[i]]++;
      }
      int sum = 0;
      for (int i = 0; i < 10; i++){
        if (all[i])
          sum++;
    }
      memset(all,0,sizeof(all));
      if (sum == N)
        break;
      Y++;
      
    }
    printf("%d %04d\n",Y-first,Y);
  }
  return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM