2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 蓝桥杯冲刺31 Day10

蓝桥杯冲刺31 Day10

时间:2022-11-30 14:17:44

相关推荐

蓝桥杯冲刺31 Day10

不一样的神奇算法

题目描述:

编程分析:

思路1:暴力求解用for循环来一个一个试

本文思路:

因为要求四个数无重复,我个人认为DFS可以帮助我快速解决,但也很明显,代码较多。 也感谢我的刘学长对我的热心支持帮我调试找bug。

dfs一解再解

代码如下:

#include "stdio.h"int a[10]={0},book[10]={0},result=0;int c;double cont=0;void dfs(int step){int i=0;//第一种情况 123 *4if(step== 5){int sum1,n= 0,j,num[10]={0},cnt=0;sum1= (a[1]* 100+ a[2]*10 +a[3])* a[4];j= sum1;while(j){n= j% 10;num[n]++;//num[]j/=10;}for(i=0;i<=9;i++){//条件判断,符合条件的计数if(num[i]==book[i]&&num[i]==1){//条件判断 判段数字i调用次数是否只为一次cnt++; }}if(cnt==4){//输出 printf("%d%d%d* %d=%d\n",a[1],a[2],a[3],a[4],sum1);cont++;}}//第二种情况 12*34if(step== 5){int sum2,n,q,num[10]={0},cnt=0;sum2= (a[1]* 10+ a[2])* (a[3]*10+a[4]);q= sum2;while(q){n= q% 10;num[n]++;q/=10;}for(i=0;i<=9;i++){if(num[i]==book[i]&&num[i]==1){cnt++;}}if(cnt==4){cont+=0.5;//12*34每次有重复的组合所以每次加0.5// c++;//输出 printf("%d%d* %d%d= %d\n",a[1],a[2],a[3],a[4],sum2);}}for(i=0;i<=9;i++){//book[i]==0 说明i未使用 反之则重复 要跳过if(book[i]== 0){a[step]= i;if(a[1]==0) continue;//条件判断,开头为0的直接跳过循环book[i]= 1;//标记 数已使用dfs(step+ 1);//引用自身到下一位数book[i]= 0;//重置}}}int main(){dfs(1);printf("%d",(int)cont);return 0;}

答案如下:

15* 93= 1395201* 6=1206210* 6=126021* 60= 126021* 87= 182727* 81= 218730* 51= 1530351* 9=315935* 41= 143541* 35= 1435473* 8=3784501* 3=1503510* 3=153051* 30= 153060* 21= 126081* 27= 218787* 21= 182793* 15= 139512

dfs再解纸牌三角形(可以借鉴一下加深理解)

夏目友人帐语录:

我想成为一个温柔的人,因为曾被温柔的人那样相待,深深的了解那种被温柔相待的感觉。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。