安丘建设网站,自助建设网站,代理商加盟,网站编程以上是新浪微博中一奇葩贴#xff1a;“我出生于1988年#xff0c;直到25岁才遇到4个数字都不相同的年份。”也就是说#xff0c;直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求#xff0c;自动填充“我出生于y年#xff0c;直到x岁才遇到n个数字都不相同的…
以上是新浪微博中一奇葩贴“我出生于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 解题
//题目要求我出生于y年直到x岁才遇到n个数字都不相同的年份也就是说直到2013年才达到4个数字都不相同
//输入为出生年份y不相同数字n
//输出为年龄x岁目标年份i
#include stdio.h
#include string.h
int main() {int bir[4]; //最多4个不相同数字因此开一个空间存放不同数字的次数。int y, n; scanf(%d%d, y, n); //出生年份不相同数字nint i, count 0;for (i y; i 3020; i) {//输入为出生年份作为界限的目标年份未知取i3020ID为“代码晓菜鸡”的大佬经过检测上界限为3012 count 1;bir[0] i / 1000;bir[1] i / 100 % 10;bir[2] i / 10 % 10;bir[3] i % 10;if (bir[0] ! bir[1] bir[0] ! bir[2] bir[0] ! bir[3])count; //检查千位数字是否与其他位上的数字不同如果是增加计数器。if (bir[1] ! bir[2] bir[1] ! bir[3]) count; //检查百位数字是否与其他位上的数字不同如果是增加计数器。if (bir[2] ! bir[3]) count; //检验个位if (count n) break;}printf(%d %04d, i - y, i); //年龄目标年份return 0;
}
注意
当count等于n时意味着已经找到了满足条件的年份此时不需要继续循环因此使用break语句跳出循环。
这个条件检查是为了确保只打印出第一个满足条件的年份而不是继续循环并打印出所有满足条件的年份。通过跳出循环程序可以避免对后续年份的检查从而提高程序的效率。
正如ID为“代码晓垃圾”的大佬说这道题直接暴力对比输入年份的每一项异同即可。
本题精髓也就在此了。希望能帮到更多人理清思路吧到此一维数组就告一段落了。