华为面试算法题求助
给三个数,a,b,n,输出a到b范围内数中不包含n的数的个数,n范围是0到9,这个不用暴力怎么写,比如说a为1,b为20,n为2,结果为17,有无大佬给个解答
全部评论
数位dp,这个是hard难度的题,面试手撕属于太难了
#include<stdio.h>
int main() {
int t , a=1, b=20, n=2,w,k=0;
scanf_s("%d%d%d", &a, &b, &n);
for (w = a; w <= b; ++w) {
t = w;
do {
if ((t< 10 )&& (t == n))break;
else if ((t>=10)&&(t%10 == n)) break;
else t = t / 10;
} while (t != 0);
if (t==0)
{
k++;
printf("%d\n", w);
}
}
printf("有%d个数", k);
}
数位dp吧
感觉需要把个十百每位取出来分别与n进行比较
数位dp,或者数值范围小的话,直接暴力判断
把包含的算出来减掉
这不是排列组合问题嘛,每个位不能取n
相关推荐
04-10 23:34
中南大学 前端工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享