ACM HDU 1014 Uniform Generator
阿新 • • 發佈:2017-11-12
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)View Code10 { 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 }
ACM HDU 1014 Uniform Generator