欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 蓝桥杯2024年11月20日个人赛报名页下方例题解答

蓝桥杯2024年11月20日个人赛报名页下方例题解答

2025/2/1 11:32:50 来源:https://blog.csdn.net/St_Ludwig/article/details/143907837  浏览:    关键词:蓝桥杯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;//至此位数依然清楚为mfor (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的数字进行打印的功能,以方便我们判断是否有搞错或者漏掉的项(虽然实际操作起来判断仍然不是特别直观)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com