蓝桥杯31日冲刺 Day 3

蓝桥杯真题打卡题解 Day 3

额,至于为啥从第三天开始,就不解释了。

##第一题
蓝桥杯31日冲刺 Day 3_第1张图片
作为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;
}

运行结果:

144

##第二题
题目介绍蓝桥杯31日冲刺 Day 3_第2张图片
这题比较简单我是直接爆

代码如下:

 #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

你可能感兴趣的:(蓝桥杯冲刺题解,蓝桥杯,算法)