• L1-033. 出生年


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

    思路:

    将年份的千百十个位分别保存在num数组中,根据千百十个对应的数字,将record数组对应的数加一,最后经过一个循环将record数组中不为0的个数记录到sum中,sum即为该年份中不同数字的个数;
    其中代码中memset函数是用0初始化数组。



    调试心得:

    一开始在vc上运行的完全正确,但是在PAT上测试时,却一直显示编译错误,经过百般折腾,最后才发现原来头文件#include<cstring> 与#include<string>是不一样的。


    代码

    #include<iostream> 
    #include<cstring> 
    #include<stdio.h>
    using namespace std;
    int main() 

    int year,n;
    int first ;
    int num[4];
    int record[10];
    memset(record,0,sizeof(record));
    int sum;
    cin>>year>>n;
    first = year;
    while(1){
    sum = 0;
    num[0] = year/1000;
    num[1] = year/100%10;
    num[2] = year/10%10;
    num[3] = year%10;
    for(int i=0;i<4;i++){
    record[num[i]]++;
    }
    for(int j =0;j<10;j++){
    if(record[j])
    sum++;

    }
    memset(record,0,sizeof(record));

    if(sum == n){
    cout<<(year - first)<<" ";
    printf("%04d",year);
    break;

    }
    year++;
    }

    return 0; 
    }

     
  • 相关阅读:
    C#写文本文件,如何换行(添加换行符)
    C#使用oledb操作excel文件的方法
    winform之combobox
    vs2010快捷键
    可以下载一些书籍代码的网站
    对php和java里面的static函数和static的一些理解
    10.4-CMake find 模块
    6.25-Git 技巧
    6.4-Git Command
    2.25-CMake Tutorial
  • 原文地址:https://www.cnblogs.com/cyj1258/p/8542073.html
Copyright © 2020-2023  润新知