蓝桥杯冲刺题解|蓝桥杯31日冲刺 Day 3

蓝桥杯真题打卡题解 Day 3 额,至于为啥从第三天开始,就不解释了。 ##第一题
蓝桥杯冲刺题解|蓝桥杯31日冲刺 Day 3
文章图片

作为C语言小i白的我刚开始接触这一道题,毋庸置疑,用了n个for循环,简直就是痛苦。而今天我要分享一下dfs做法。
###试题分析
问题分解:
首先,我们需要知道我们要用到1~9的数字。
其次,让其三边相加的结果相等。
最后,观察图可知 三个边在相加时有相等的元素。
话不多说 上代码

#include "stdio.h" //纸牌排列 int a[10],book[10],total=0; void dfs(int step) { int i,cont=0; if(step==10){ //定义三个变量来保存并判断 int sum1,sum2,sum3; sum1=a[1]+a[2]+a[3]+a[4]; sum2=a[4]+a[5]+a[6]+a[7]; sum3=a[7]+a[8]+a[9]+a[1]; if(sum1==sum2&&sum2==sum3){ total++; }//条件符合的 次数加一 } for (i=1; i<=9; i++){ //用book[i]==0来判断 为0 即未使用这个数,为1则表示被使用过了 去重 if(book[i]==0){ a[step]=i; book[i]=1; dfs(step+1); //引用自身,判断下一个数 book[i]=0; //重置, } } }int main(){ dfs(1); printf("%d",total/6); return 0; }

【蓝桥杯冲刺题解|蓝桥杯31日冲刺 Day 3】运行结果:
144

##第二题
题目介绍蓝桥杯冲刺题解|蓝桥杯31日冲刺 Day 3
文章图片

这题比较简单我是直接爆
代码如下:
#include int main() { int y; for(y=1950; y<2014; y++){ int a=y/1000%10; int b=y/100%10; int c=y/10%10; int d=y%10; if(a+b+c+d==2014-y){ printf("%d\n",y); } } return 0; }

结果如下:
1988 2006

嗯,,因为小明年纪大点嘛 所以他的出生年纪肯定是1988而另一个自然是他表弟的年纪。
##总结
今天主要学习了bfs及dfs,
推荐博客链接
https://blog.csdn.net/m0_46549425/article/details/108025133?spm=1001.2014.3001.5506

    推荐阅读