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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

坑爹的奥数——枚举

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 坑爹的奥数——枚举 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題引入

小明在數學課上遇到一道奧數題是這樣的,【】3*6528=3【】*8256,在兩個【】內填入相同的數字使得等式成立。

不用分析了,直接show代碼:

for(int i=1;i<=9;i++)if((i*10+3)*6528==(30+i)*8256)printf("%d",i); //答案為4

?

這就是最簡單的枚舉算法。

枚舉算法的基本思想是:有序地去嘗試每一種可能。

?

二、問題拓展

現在小明又遇到一個稍微復雜一點的奧數題,【】【】【】+【】【】【】=【】【】【】,將數字1~9分別填入9個【】中,每個數字智能使用一次使得等式成立。

分析:根據枚舉思想我們只需要枚舉每一位上所有可能的數就好了。

int a,b,c,d,e,f,g,h,i,total=0;for(a=1;a<=9;a++) //第1個數的百位for(b=1;b<=9;b++) //第1個數的十位for(c=1;c<=9;c++) //第1個數的個位for(d=1;d<=9;d++) //第2個數的百位for(e=1;e<=9;e++) //第2個數的十位for(f=1;f<=9;f++) //第2個數的個位for(g=1;g<=9;g++) //第3個數的百位for(h=1;h<=9;h++) //第3個數的十位for(i=1;i<=9;i++) //第3個數的個位 { //接下來要判斷每一位上的數互不相等 if(a!=b && a!=c && a!=d && a!=e && a!=f && a!=g && a!=h && a!=i&& b!=c && b!=d && b!=e && b!=f && b!=g && b!=h && b!=i&& c!=d && c!=e && c!=f && c!=g && c!=h && c!=i&& d!=e && d!=f && d!=g && d!=h && d!=i&& e!=f && e!=g && e!=h && e!=i&& f!=g && f!=h && f!=i&& g!=h && g!=i&& h!=i&& a*100+b*10+c+d*100+e*10+f==g*100+h*10+i){total++;printf("%d%d%d+%d%d%d=%d%d%d\n",a,b,c,d,e,f,g,h,i);}}printf("total=%d",total/2); //這是關鍵return 0;

?

注意:因為173+286=459與286+173=459是同一種組合,因此我們在輸出的時候需要將total的值除以2.

?

三、代碼優化

但是上述代碼中的if判斷條件似乎太長了,我這輩子估計都很難看到如此冗雜的判斷條件了...

所以我們用一個book數組來解決互不相等的問題:

int a[10],i,total=0,book[10],sum; //這里用a[1]-a[9]來代替剛才的a~ifor(a[1]=1;a[1]<=9;a[1]++)for(a[2];a[2]<=9;a[2]++)for(a[3];a[3]<=9;a[3]++)for(a[4];a[4]<=9;a[4]++)for(a[5];a[5]<=9;a[5]++)for(a[6];a[6]<=9;a[6]++)for(a[7];a[7]<=9;a[7]++)for(a[8];a[8]<=9;a[8]++)for(a[9];a[9]<=9;a[9]++){for(i=1;i<=9;i++) //初始化數組book[i]=0;for(i=1;i<=9;i++) //如果某個數出現過就標記一下book[a[i]]=1;sum=0;for(i=1;i<=9;i++)sum+=book[i]; //統計供出現了多少個不同的數 if(sum==9&&a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9]){total++;printf("%d%d%d+%d%d%d=%d%d%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);} }printf("total=%d",total/2);return 0;

上面這段代碼中,為了方便標記哪些數出現過,我將循環變量a、b、c、d、e、f、g、h、i用一個一維數組a代替,用book數組來標記1~9每個數是否出現過,默認為0,出現過的就設為1。然后我們只需要判斷book數組中有多少個1就可以了。如果恰好有9個1則表示,1~9每個數都有且只出現過一次。

?

四、篇外:dfs求解

#include<stdio.h> int a[10],book[10],total=0; void dfs(int step) //step表示現在站在第幾個盒子面前 {int i;if(step==10){if(a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9]){/*如果滿足要求,可行解+1,并打印這個解*/ total++;printf("%d%d%d+%d%d%d=%d%d%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);}return; //返回之前的一步(最近調用的地方) }/*站在第step個盒子面前,按照1、2、3...n的順序一一嘗試*/for(i=1;i<=9;i++){if(book[i]==0){a[step]=i;book[i]=1;dfs(step+1);book[i]=0;}} return; } int main() {dfs(1);printf("total=%d",total/2);return 0; } 奧數算式求解-dfs

?

總結

以上是生活随笔為你收集整理的坑爹的奥数——枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费不卡av| 波多野结衣家庭主妇 | 日本一级片在线播放 | 美女被日网站 | 成年人在线视频 | 成片免费观看视频大全 | 国产超碰av | 俺去操 | 国产亚洲在线观看 | 久草色视频| 色综合综合色 | 欧美成人午夜精品免费 | 伊人久在线 | 女人和拘做爰正片视频 | 玉米地疯狂的吸允她的奶视频 | 狼友视频国产精品 | 99久久99久久久精品棕色圆 | 五月婷婷激情小说 | 国产久精品| 亚洲午夜在线观看 | 国产伦理久久精品久久久久 | 成人无高清96免费 | 色999视频| www.白浆 | 美女视频黄免费 | 玖玖爱这里只有精品 | √天堂中文官网8在线 | 在线观看视频一区二区三区 | 国产熟女一区二区三区五月婷 | 色片免费看 | 日日干日日操 | 成人免费黄色大片v266 | 色呦呦视频 | 国产精品一区二区三区线羞羞网站 | 在线视频免费观看一区 | 综合色av| 91一区二区三区在线观看 | 亚洲视频网址 | 日日爽夜夜爽 | 热精品 | 日韩不卡在线 | 99爱在线视频 | 欧美性xxxx图片 | 国产精品99久久久久久大便 | 深夜老司机福利 | 可以直接在线观看的av | 日韩毛片高清在线播放 | 久久久久久久美女 | 青青草超碰 | 国产大学生av | 日本少妇高潮 | 亚洲婷婷丁香 | 色综合久久网 | 女人av在线 | 一区二区三区免费看视频 | 亚洲一二三区在线 | 久久久91视频 | 草av| 看看黄色片 | 久久两性视频 | 久久在线精品视频 | 欧美乱子伦 | 国产精品一区一区三区 | 又黄又爽的网站 | 这里只有精品免费视频 | 午夜免费视频观看 | 人妻精品一区二区三区 | 偷偷操不一样的99 | 丰满少妇高潮一区二区 | 精品日本一区二区三区 | 欧美亚洲国产成人 | 日韩精品电影一区 | 免费a在线观看 | av动态 | 国产一区二区在线免费 | 天天射日日操 | 国产精品福利在线 | 无码少妇一区二区三区芒果 | 国产精品国产三级国产aⅴ下载 | 国产经典久久久 | 美国三级视频 | 色播视频在线 | 免费观看一区二区三区毛片 | 天天干夜夜想 | 海角官网| 亚洲黄色a级片 | 三级国产网站 | 成人一级片视频 | 欧美日韩国产中文 | 国产精品夫妻 | 就去吻亚洲| 亚洲欧美日韩精品一区 | 亚洲精品久久久久久久蜜桃 | 国产免费视频一区二区三区 | www.99re.| 国产成人av免费观看 | 欧美成一区二区三区 | 我爱av好色 | 四虎亚洲精品 |