蓝桥杯2024年11月20日个人赛报名页下方例题解答
原题:
小明对数位中含有2、0、1、9 的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。
请问,在1到n中,所有这样的数的和是多少?
这个题本身并没有太难,比较复杂的地方在于判断,官网给出了一种更加简洁的方法,但是我当时没有看,我看到题目后立刻尝试着手自我解答,下面给出一种我的思路:
首先设立一个input用于接收我们输入的n,然后搞一个变量用于控制从1到n的循环,用以判断循环中这些数字是否属于我们的筛选范畴,如果属于则用sum+=它,如果不属于则跳过,反复判断之后,我们可以得到正确答案,下面给出完整的代码解答过程:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int input = 0; int m = 0;
int sum = 0; int n = 0;
int t = 0;
scanf("%d", &input);
for (n = input; n > 0; n--) {
while (n / 10 != 0) {
m++;
n /= 10;
}
m += 1; n = input-t;//至此位数依然清楚为m
for (m = m; m >= 0; m--) {
if (n % 10 == 9 || n % 10 == 2) {
printf("%d\n", input - t);
sum += input-t;
break;
}
else if (n % 10 == 1) {
printf("%d\n", input - t);
sum += input-t;
break;
}
else if (n > 9 && n % 10 == 0) {
printf("%d\n", input - t);
sum += input-t;
break;
}
if (n / 10 != 0) {
n = n / 10;
}
}
t++; m = 0; n++;
}
printf("Sum=%d", sum);
return 0;
}
我想到一个事情就是,如果我们多设立几个变量,比如a1、a2、a3、a4,并且用scanf分别给它们赋值,再用它们替换循环判断中2、9、1、0的位置,这样我们就可以求出任意1~n以内,包含a1、a2、a3、a4的数字的和,算是拓展了一下这个题。
关于这个代码,我设置了可以把每一个被加进sum的数字进行打印的功能,以方便我们判断是否有搞错或者漏掉的项(虽然实际操作起来判断仍然不是特别直观)。
原文地址:https://blog.csdn.net/St_Ludwig/article/details/143907837
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!