2013ACM集訓第一天!

2021-06-16 12:42:36 字數 1551 閱讀 4592

列舉演算法應用一:用一分、二分、五分的硬幣組成一元錢,要求每種硬幣至少有乙個

分析:列舉物件的選取,用k,i分別表示五分硬幣和二分硬幣的個數,範圍分別是1到20和1到50,這相對一分硬幣個數範圍來比小很多,用這兩個迴圈時間複雜度較小

#include

using namespace std;

int main()

}cout

執行結果:

列舉演算法應用二:

1-9九個數字,隨意組成三個三位數,要求這三個數的個、十、百都各不相同,這三個數大小比值為1:2:3,問有幾種組合,並輸出該組合

分析:首先確定出最小數的範圍,這樣另外兩個數就可以表示出來,定義乙個陣列a[10],全部元素定義為0,分別求出三位數的個十百位上的數,以他們為底數的陣列元素自加,最後判斷,如果陣列元素全部是1,則計數器count自加,並輸出相應的三個三位數。

#include

using namespace std;

int main()

;int count=0;

int n,x;

for(x=123;x<333;x++)

;n=0;

for(int i=1;i<=3;i++)

}for(int k=1;k<=10;k++)

if(n==9)

}cout<

執行結果:

列舉演算法應用三:

郵箱密碼是五位數,已知該密碼是81和91的公倍數,百位數是1,求出該郵箱密碼

方法一:

設x來表示郵箱密碼,則x範圍是10100到99199,在進行判斷是不是81和91的公倍數,並判斷百位是不是1

#include

using namespace std;

int fun1(int x,int y)//求最大公約數

return y;

}int fun2(int x)//求x百位上的數

int main()

}執行結果:

方法二:

先求出81和91的公倍數,判斷是不是在10100到99199之間,再判斷百位上是不是1,

//郵箱密碼五位數,是81和91的公倍數,已知百位數是1,找回密碼!

#include

using namespace std;

int fun1(int x,int y)//求最大公約數

return y;

}int fun2(int x)//求x百位上的數

int main()

return 0;}

執行結果:

ACM集訓第一天

下午剛來集訓,在題庫裡刷了四道題,第一道題和第二道題都比較基礎,第三道題還挺有意思的,跟大家分享一下。這是一道動態規劃題,可以根據樣例模擬一下 就可以求出狀態轉移方程了。步驟大概是這樣的 a點 b點,m是馬的位置,x是被馬攔著不能走的點 別告訴我你們連馬走 日 字都不知道 其中每個點的值代表的是從a...

集訓第一天

1.兩個正整數,它們的乘積等於它們的最大公約數和最小公倍數的乘積。2.記憶法。用乙個陣列儲存計算的結果,而不是每次迴圈都計算一次。3.輸入多組資料 int n while n scanf 4.輸入 include using namespace std int x,y cin x y cout 5....

集訓第一天

熟悉系統程式設計,了解read open write fread fopen fwrite open開啟檔案o creat若欲開啟的檔案不存在則自動建立該檔案,o rdonly以唯讀方式開啟檔案 最後加入許可權 00700 等 定義函式 ssze t read int fd,void buf,siz...