2017天梯赛题解L1-1

发布时间:1714168446   来源:文档文库   
字号:
L1-1 出生年
题目:

思路:

一看到题目上“4个数字都不同的年份”,明显是要把年份的4个数字分离,但是分离之后如何判断有几个数字不同呢?我先想到,可以每一个数字分分别判断与别的数字是否相同,然后记录下不同的数字的个数,最后取其中最小的一个值,比如1233,分离后就是1233四个数字,与1不同的数字有三个,与2不同的数字有三个,与3不同的数字有两个,与3不同的数字有两个,然后取最小值2你会想到1233不是有三个数字不同吗?为什么要取2?因为如果数字1111的话,与每一个数字不同的数字都是零个,但其实1111是有一个数字不同,所以必须在最后取的结果上加一

当时我用这个思路写完,提交之后,发现还是有两组数据是WA,我想会不会是之前的思路有问题,于是我从1开始打表来看每一次返回的不同数字个数是多少,然后发现11返回的不是2,而是3。我模拟了一下发现0011每一个数不同的是2然后我们再加一返回就成了3。然后发现所有的AABB,ABAB,ABBA这种AABB,ABAB,ABBA这种类型的数就不加一,直接返回


代码:
#include using namespace std;
int min(int x, int y{ if (x > y return y; return x; }
int pan(int x{ int a = x / 1000, b = x % 1000 / 100, c = x % 100 / 10, d = x % 10; int len1 = 1, len2 = 1, len3 = 1, len4 = 1; if (a != b{ len1++; len2++; } if (a != c{ len1++; len3++; } if (a != d{ len1++; len4++; } if (b != c{ len2++; len3++; } if (b != d{ len2++; len4++; } if (c != d{ len3++; len4++; } if (len1 == len2&&len3 == len4&&len1 == 3 return len1 - 1; return min(len1, min(len2, min(len3, len4; }
int main({ int x, y, z; while (cin>> x >> y{ z = x; while (1{ if (pan(z == y break; z++; } printf("%d %04d\n", z - x, z; } return 0; }

本文来源:https://www.2haoxitong.net/k/doc/726887ed7e192279168884868762caaedd33baf9.html

《2017天梯赛题解L1-1.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

相关推荐