L1-033 出生年 (15 分)

作者: 陈越

单位: 浙江大学

时间限制: 400 ms

内存限制: 64 MB

代码长度限制: 16 KB

L1-033 出生年 (15 分)_第1张图片

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

源码: 

#include
#include
#include
using namespace std;

int main(){
	int y, n;
	scanf("%d %d", &y, &n);
	char c[4];	//储存四个数字,用来判断有几个数字不相同 
	int flag[10] = {0};	//存在的数字标记为1 
	int count =0;	//不相同的个数 
	int y1 = y, y2 = y;

	for(int i=3; i>=0; i--){
		int j = y1%10;
		y1 /= 10;
		if(j) c[i] = j+48;	//int转char 
		else c[i] = 48;		//'0'的ASCLL值为48
		if(!flag[j]){
			flag[j] = 1;
			count++;	//计数,看有几位数不相同 
		}
	}
	while(count != n){
		y++;
		y1 = y;
		count = 0;
		
		for(int i=0; i<10; i++)	flag[i] = 0;	//重置
		
		for(int i=3; i>=0; i--){
			int j = y1%10;
			y1 /= 10;
			if(j) c[i] = j+48;	//int转char 
			else c[i] = 48;		//'0'的ASCLL值为48
			if(!flag[j]){
			flag[j] = 1;
			count++;	//计数,看有几位数不相同 
			}
		}
	}
	printf("%d %04d", y-y2, y);
	return 0;
}

 

你可能感兴趣的:(团体程序设计天梯赛-练习集)