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

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

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

2019-11-10 23:51:03
字體:
來源:轉載
供稿:網友

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


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

+ 三 羊 獻 瑞

三 羊 生 瑞 氣 (如果有對齊問題,可以參看【圖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;}

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

五重循環以上數字不能重復要有順序
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥中县| 泗水县| 凌源市| 友谊县| 浠水县| 菏泽市| 隆尧县| 临清市| 礼泉县| 南陵县| 金山区| 岱山县| 商丘市| 无为县| 化德县| 香格里拉县| 赣榆县| 丰台区| 临夏县| 柘荣县| 延边| 含山县| 淅川县| 玉树县| 郁南县| 南涧| 庆云县| 辽阳市| 乌苏市| 五家渠市| 榆林市| 华阴市| 安仁县| 醴陵市| 濮阳市| 甘孜| 丽江市| 塘沽区| 嘉定区| 靖安县| 海盐县|