日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)

發(fā)布時(shí)間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

勵(lì)志用更少的代碼做更高效的表達(dá)


題目描述:

小明的作業(yè)本上有道思考題:
看下面的算式:
(□□□□-□□□□)*□□=900
其中的小方塊代表0~9的數(shù)字,這10個(gè)方塊剛好包含了0~9中的所有數(shù)字。
注意:0不能作為某個(gè)數(shù)字的首位。
小明經(jīng)過幾天的努力,終于做出了答案!如下:
(5012-4987)*36=900
用計(jì)算機(jī)搜索后,發(fā)現(xiàn)還有另外一個(gè)解,本題的任務(wù)就是:請你算出這另外的一個(gè)解。


解法一:全排列

這是一道非常經(jīng)典的全排列類型題!這是一道非常經(jīng)典的全排列類型題!!這是一道非常經(jīng)典的全排列類型題!!!

幾種分析思路

1 使用多重for循環(huán)+判斷代碼量大,且容易出錯(cuò),10個(gè)元素之間互相判定不重復(fù)非常非常復(fù)雜。 放棄。

2 使用全排列函數(shù)。 具體函數(shù)的使用方法見博客:傳送門

使用全排列函數(shù)可以讓我們擁有各個(gè)位數(shù)不相等的十個(gè)數(shù)字的所有組合! 因此我們只需判斷0是否在第一位即可!


代碼展示

#include<bits/stdc++.h> using namespace std; int main() {int a[10] = {0,1,2,3,4,5,6,7,8,9};int num = 0;do{if(a[0]!=0 && a[4]!=0 && a[8]!=0) {int x1 = a[0]*1000+a[1]*100+a[2]*10+a[3];int x2 = a[4]*1000+a[5]*100+a[6]*10+a[7];int x3 = a[8]*10+a[9];if((x1-x2)*x3==900)printf("(%d-%d)*%d=900\n", x1, x2, x3);}}while(next_permutation(a, a+10));cout << num; return 0; }

解法二:DFS

本題也可以使用DFS解題, 但并不是叫我們在考場中使用DFS,而是讓初學(xué)者利用這道簡單的題,加深對DFS使用的熟練程度。 (大佬請自動(dòng)忽略)

DFS沒啥好說的,就是模板 。 直接上代碼

#include<bits/stdc++.h> using namespace std; int a[10]; int vis[10]; void dfs(int step) {if(step == 10) {if(a[0]!=0 && a[4]!=0 && a[8]!=0) {int x1 = a[0]*1000 + a[1]*100 + a[2]*10 + a[3];int x2 = a[4]*1000 + a[5]*100 + a[6]*10 + a[7];int x3 = a[8]*10 +a[9];if((x1-x2)*x3==900) printf("(%d-%d)*%d=900\n", x1, x2, x3);}} else for(int i = 0; i < 10; i++) if(!vis[i]) {vis[i] = 1;a[step] = i;dfs(step+1);vis[i] = 0;} }int main() {dfs(0); return 0; }

總結(jié)與思考

1 藍(lán)橋杯的絕大多數(shù)題素有搜索與暴力杯之稱,因此對于本題羅列的兩種解法:全排列(暴力法)和dfs(搜索法),一定要牢牢掌握!每年真題都有涉及!

2 最重要的一點(diǎn),我們的目的是解題, 不是炫技! 實(shí)用才是王道!

總結(jié)

以上是生活随笔為你收集整理的16行代码AC_蓝桥杯 2017年C组第三题 算式900(暴力解法+DFS解法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。