蓝桥杯2019c语言a组,2019蓝桥杯c语言A组题目以及解析(纯C)

本文章将持续更新一些简单的赛事题目,解题使用纯C语言,不涉及C++,因为我也是刚学习C语言,来练练提升自己水平。本文章的解题思路不会考虑算法的简洁性,以算法的简单优先,可能代码量大而简单,但是更易学习。

我会给每一行代码加上注释,适合像我一样的初学者学习。

A. 平方和

【问题描述】

小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574,平方和是 14362。注意,平方和是指将每个数分别平方后求和。

请问,在 1 到 2019 中,所有这样的数的平方和是多少?

答案:2658417853

看到很多大佬的解题思路真的简洁清晰,我来个更笨的枚举解题

思路:先用for循环1-2019的所有数字,把每一个数字转换成字符数组比如1转换成’1’ 100转化成’1’ ‘0’ ‘0’,再根据位数逐个判断是否包含‘2’ ‘0’ ‘1’ ‘9’

上代码:

#include

int main()

{

long long sum = 0; //创建一个长整数变量,用来存放平方和

for (long long a = 1; a<=2019; a=a++)//循环1-2019的每一个数字

{

char s[8];//创建字符数组,用于整数转换字符串的储存

sprintf(s, "%lld", a);//整数转换字符串

if (a<10)//下面的if都是循环判断每一个字符数组成员是否含有2,0,1,9

{

if (s[0]=='2' || s[0] == '0' || s[0] == '1' || s[0] == '9')

{

sum = a * a+sum;

}

}

if (a<100 && a>=10)

{

if (s[0] == '2' || s[0] == '0' || s[0] == '1' || s[0] == '9')

{

sum = a * a + sum;

}

else

{

if (s[1] == '2' || s[1] == '0' || s[1] == '1' || s[1] == '9')

{

sum = a * a + sum;

}

}

}

if ( a < 1000 && a >= 100)

{

if (s[0] == '2' || s[0] == '0' || s[0] == '1' || s[0] == '9')

{

sum = sum + a * a;

}

else

{

if (s[1] == '2' || s[1] == '0' || s[1] == '1' || s[1] == '9')

{

sum = sum + a * a;

}

else

{

if (s[2] == '2' || s[2] == '0' || s[2] == '1' || s[2] == '9')

{

sum = sum + a * a;

}

}

}

}

if (a < 10000 && a >= 1000)

{

if (s[0] == '2' || s[0] == '0' || s[0] == '1' || s[0] == '9')

{

sum = sum + a * a;

}

else

{

if (s[1] == '2' || s[1] == '0' || s[1] == '1' || s[1] == '9')

{

sum = sum + a * a;

}

else

{

if (s[2] == '2' || s[2] == '0' || s[2] == '1' || s[2] == '9')

{

sum = sum + a * a;

}

else

{

if (s[3] == '2' || s[3] == '0' || s[3] == '1' || s[3] == '9')

{

sum = sum + a * a;

}

}

}

}

}

}

printf("%lld", sum);

B. 数列求值

【问题描述】

给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求

第 20190324 项的最后 4 位数字。

答案:4659

思路:递推,每次都%10000 经过python尝试第一千项目已经达到下面的结果

10565699428369704222792849547500

98236519342255152919675406067018

21396074739381766709558872599594

89737224174222274775896140703938

20954716814070302286673551230293

56094067484636736752022453834248

26302070809058467686757909035536

45664897731604869996342518016379

904334431

所以只能%10000,不要计算全部位数!!!

上代码:

#include

int main()

{

long long a, b,c,d;//创建整数变量a,b,c分别表示后三项,d表示最后一项

a = 1; b = 1; c = 1; //初始赋值

for (int e=4; e <= 20190324; e++)//斐波那契数列

{

d = (a + b + c)%10000;//取余数计算即可,题目要求是后四位所以我们只需要计算后取后四位这样循环计算即可

a = b; b = c; c = d;

}

printf("%lld\n", d);

}

C. 最大降雨量

【问题描述】

由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨。这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 个数字。法术一共持续 7 周,每天小明都要使用一张法术符,法术符不能重复使用。每周,小明施展法术产生的能量为这周 7 张法术符上数字的中位数。法术施展完 7 周后,求雨将获得成功,降雨量为 7 周能量的中位数。由于干旱太久,小明希望这次求雨的降雨量尽可能大,请大最大值是多少?

答案:34

思路:emm,这是道数学题,刚开始我想把所有可能的排列都算出来,结果49的阶乘实在数据量太多计算机根本算不出。于是只能智取了,如图所示:

caaa2c51f1c099ee2a1ea71906508eca.png

假设我们按照每一周的中位数的大小将每一周进行排列到1-7周

那么第四周的中位数就是降雨的能量,为了保证能量最大也就是我在图中画斜线的括号数字最大

而画圆圈的括号的数字一定要比画斜线的括号数字大,所以至少得有15个数比降雨的能量大

那就49-15=34,这就是降雨的最大能量了。但是代码怎么写,我也不知道,看来数学很重要呀

原文链接:https://blog.csdn.net/qq_33681342/article/details/109050250

站长简介:前每日优鲜python全栈开发工程师,自媒体达人,逗比程序猿,钱少话少特宅,关注我,做朋友, 我们一起谈人生和理想吧!我的公众号:想吃麻辣香锅

关注公众号回复充值+你的账号,免费为您充值1000积分

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值