1. 程式人生 > >ACM HDU 1014 Uniform Generator

ACM HDU 1014 Uniform Generator

cli show src 編寫 can style play 如果 tdi

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1014

解題思路:

1. 把題目意思讀懂後,明白會輸入兩個數,然後根據題中的公式產生一系列偽隨機數,看這些數是不是能夠包含0~MOD-1。如果產生不了就輸出“Good Choice”,否則輸出“Bad Choice”。

2. 全部假使x從0開始,設STEP為a,MOD為b。如果說a,b存在倍數關系,即假設最小存在2倍關系,那麽就會有b=2a。x初始為0,第一步之後為a,第二步之後為0,之後a、0交替出現。周期為2,那麽始終都不會產生0~b-1的全部數。以此類推,只要存在幾倍關系,周期就為幾。可見,兩數存在倍數關系就不會得到全部數列。則2a與3a也不會有結果。所以說,當兩數存在公約數,即兩數不互質,就不會產生一系列數。

3. 如果兩數互質,舉一個最簡單的例子。令a=b+1。則x初始為0,第一步之後為1,第二步之後為2,第三步之後為3,則可以產生一系列偽隨機數滿足題中要求。

4. 編寫代碼時註意最後輸出,C++輸出默認右對齊。

源代碼:

技術分享
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int t,n,m,a,b;
 5     while(scanf("%d%d",&m,&n)!=EOF)
 6     {
 7         a=m;
 8         b=n;
 9         if(m<n)
10 { 11 t=m; 12 m=n; 13 n=t; 14 } 15 if(n==0) 16 { 17 n=m; 18 } 19 else 20 { 21 while(m%n!=0) 22 { 23 t=m%n; 24 m=n; 25 n=t;
26 } 27 } 28 if(t==1) 29 printf("%10d%10d Good Choice\n\n",a,b); 30 else 31 printf("%10d%10d Bad Choice\n\n",a,b); 32 33 } 34 return 0; 35 }
View Code

ACM HDU 1014 Uniform Generator