zoukankan      html  css  js  c++  java
  • 第3次实验-运用数组编写程序-7-2出生年

    题目描述

    以上是新浪微博中一奇葩贴:“我出生于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位数字不同的条件。

    题解

    读题
    注意:不足4位的年份要在前面补零
    注意:所谓“n个数字都不相同”是指不同的数字正好是n个。
    如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。
    伪代码:

    cin>>now>>n;
    age = 0;
    .......(一段代码);//判定当年是否满足要求
    while(!flag){//flag:记录now是否满足要求
    	now ++;
    	age ++;
    	......(一段代码);//判定now是否满足要求
    }
    cout<<age<<" "<<now;//这么写是错的,因为如果now=1,必须输出0001;
    	
    }
    

    注意下面的赋初值!!!!因为这一段代码需要使用很多次,所以每一次必须清空数组和变量

    细说......(一段代码)//要运行很多次
    bool Mark[x]:年份中x是否出现

    一段代码如下:

    for(int i=0;i<=10;i++)
    	Mark[i]=0;//清空变量 赋初值【重点】
    
    
    
    /*now==1999到now==2000:1999--Mark[1]=1,Mark[9]=1,
    不清空就会在2000(下标为0,1,2,9的Mark数组值都为1)的时候出问题*/
    
    
    
    tmp=now;//把now的值存下来
    cnt=0;//赋初值,保证从0开始加
    x=0;//记录now是否小于1000,统计now的位数
    while(tmp){
    	Mark[tmp%10]=1;//把最后一个值依次取出 并把它mark数组标记为1 ,表示这个数字出现过
    	tmp/=10;
    	x++;
    }
    if(x<4)Mark[0]=1;//如果now不足4位,则前面一定有0
    for(int i=0;i<=9;i++)
    	if(Mark[i])
    		cnt++;
    
    if(cnt==n)flag=1;//不能>=
    
    输出补0;//now
    tmp=now;
    cnt=0;
    while(tmp){
    	tmp/=10;
    	cnt++;//==3
    }
    
    for(int i=1;i<=4-cnt;i++)cout<<0;
    
    梦里如昨,此身似我非我 冷雾割风寒浸骨,意沉南柯
  • 相关阅读:
    遗传算法
    模拟退火算法
    分支限界法(一)(转)
    (操作Excel 2007以後)Open XML SDK 2.0 for Microsoft Office
    c#接口和抽象类的区别
    抽象工厂模式
    乐在其中设计模式(C#)系列文章索引
    VB6.0 生成 XML方法
    处理一些简单的客户端脚本(2)
    抽象类
  • 原文地址:https://www.cnblogs.com/qwqq/p/15487838.html
Copyright © 2011-2022 走看看