国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

藍橋杯之全排列函數next_permutation()運用

2019-11-11 01:26:41
字體:
來源:轉載
供稿:網友

在藍橋杯的題目中大多數都可以運用到全排列函數 充分運用可以節省很多的時間。話不多說來刷題


三羊獻瑞 觀察下面的加法算式: 祥 瑞 生 輝

+ 三 羊 獻 瑞

三 羊 生 瑞 氣 (如果有對齊問題,可以參看【圖1.jpg】)其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。請你填寫“三羊獻瑞”所代表的4位數字(答案唯一),不要填寫任何多余內容。

看到這題一看就知道用暴力搜索法,代碼如下

#include<iostream>using namespace std;int check(int num[],int n){ for(int i = 0; i < n; i++) { if(num[i]==num[n]) { return 0; } } return 1;}int main(){ int num[8]; int count = 0; for(num[0] = 1; num[0] <=9; num[0]++) { if(check(num,0)) for(num[1] = 0; num[1] <=9; num[1]++) { if(check(num,1)) for(num[2] = 0; num[2] <=9; num[2]++) { if(check(num,2)) for(num[3] = 0; num[3] <=9; num[3]++) { if(check(num,3)) for(num[4] = 1; num[4] <=9; num[4]++) { if(check(num,4)) for(num[5] = 0; num[5] <=9; num[5]++) { if(check(num,5)) for(num[6] = 0; num[6] <=9; num[6]++) { if(check(num,6)) for(num[7] = 0; num[7] <=9; num[7]++) { if(check(num,7)) { int a = num[0]*1000+num[1]*100+num[2]*10+num[3]; int b = num[4]*1000+num[5]*100+num[6]*10+num[1]; int c = num[4]*10000+num[5]*1000+num[2]*100+num[1]*10+num[7]; if(a+b==c) { cout << b; } } } } } } } } }} return 0;}

看了一下六十多行,啊,學這么多好累啊! 對于這種超過5個循環以上的暴力可以考慮用全排列函數 第二種方法如下:

#include<iostream>#include<algorithm>using namespace std;int main1(){ int num[10] = {1,0,2,3,4,5,6,7,8,9}; int count = 0; do { if(num[0]!=0&&num[4]!=0) { int a = num[0]*1000+num[1]*100+num[2]*10+num[3]; int b = num[4]*1000+num[5]*100+num[6]*10+num[1]; int c = num[4]*10000+num[5]*1000+num[2]*100+num[1]*10+num[7]; if(a+b==c) { cout << b; break; } } }while(next_permutation(num,num+10)); return 0;}

這就簡便多了,這里注意到題目 答案唯一 所以當瞞住條件后就可以跳出循環,算法的時間就可以大大減少 自己總結了一下運用全排列的環境

五重循環以上數字不能重復要有順序
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 客服| 咸丰县| 胶南市| 墨脱县| 乐清市| 阳西县| 澄城县| 贵州省| 洪雅县| 绍兴县| 安福县| 丹寨县| 松滋市| 石嘴山市| 宜兴市| 邳州市| 平罗县| 阿拉善右旗| 如东县| 寿阳县| 文昌市| 怀仁县| 会昌县| 大竹县| 桦川县| 长垣县| 满洲里市| 锦屏县| 富民县| 潜江市| 巫山县| 萍乡市| 屯留县| 车险| 阳江市| 宁蒗| 松江区| 德化县| 即墨市| 涟水县| 松江区|