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

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

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

2019-11-10 22:31:04
字體:
來源:轉載
供稿:網友

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


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

+ 三 羊 獻 瑞

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

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

五重循環以上數字不能重復要有順序
上一篇:JNI 常用API

下一篇:1029. Median 解析

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 光泽县| 大竹县| 辽源市| 营口市| 十堰市| 东丽区| 宁晋县| 沛县| 莆田市| 邳州市| 梅河口市| 桐梓县| 武鸣县| 濉溪县| 邯郸县| 犍为县| 吉安县| 乐清市| 石家庄市| 定边县| 许昌县| 克山县| 开封市| 岗巴县| 兰西县| 阳朔县| 峨眉山市| 昭通市| 布拖县| 海宁市| 平谷区| 太谷县| 大化| 富平县| 扎赉特旗| 瑞昌市| 梅州市| 西青区| 西乌| 巴林右旗| 河源市|