对于这一道题,相信看到的你们和我一开始一样极其懵,因为你会发现要实现的东西过于复杂,一下子会没有清晰的思路
所以我们要选择另辟蹊径,从反面来得出密码(也就是先有再判断)
话不多说,先贴上代码,后面再加上思路
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int n, a, k;
scanf("%d %d %d", &n, &a, &k);
int limit = pow(10, n);
for (int b = 0; b < limit; b++)//全部输出一遍
{
int tempa = a, tempb = b;//防止ab变化
int count = 0;
for (int i = 1; i <= n; i++)//i之前循环次数的作用
{
int x = tempa % 10, y = tempb % 10;
tempa /= 10;
tempb /= 10;
if (abs(x - y) == 1 || abs(x - y) == 9)//绝对值,直接压过前导0的压力
{
count++;//合理利用变量
}
else if (x != y)
{
count = -1;
break;
}
}
if ((count != -1) && (count <= k))
{
printf("%d\n", b);
}
}
return 0;
}
我们直接选择用pow先生成出所有的可能性
然后我们需要一些变量防止a,b变化
然后我们再使用简单粗暴的x,y来防止前导0对我们造成困扰
最后我们要好好利用count以此来判断
然后这道题的大概思路就清晰了,总结一下这道题的难点其实在于前导0和一个逆向思维,也希望对这道题大家的思维有所帮助