• 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
    ",Y-first,Y);
      }
      return 0;
    }
  • 相关阅读:
    在ubuntu 12.04 x64下编译hadoop2.4
    Learn ZYNQ (9)
    Learn ZYNQ (8)
    Jquery 中 ajaxSubmit使用讲解(转)
    JSON.parse()和JSON.stringify()的区别
    $('div','li'),$('div , li'),$('div li')的区别
    用正则表达式来去除字符的前后空格
    git add 命令添加所有改动内容
    js基础知识
    Web开发学习笔记
  • 原文地址:https://www.cnblogs.com/ZefengYao/p/6644240.html
Copyright © 2020-2023  润新知