這是我第一次寫博客,作為一個ACMer,經常進別人的博客,所以自己也想寫寫博客。
HDU 1099
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2648 Accepted Submission(s): 1191
Input Input consists of a sequence of lines each containing a single positive integer n, 1<=n<=22, giving the size of the set of coupons.
Output For each input line, output the average number of lottery required to collect the complete set of n coupons. If the answer is an integer number, output the number. If the answer is not integer, then output the integer part of the answer followed by a space and then by the proper fraction in the format shown below. The fractional part should be irreducible. There should be no trailing spaces in any line of ouput.
Sample Input 2 5 17
Sample Output 3 5 11 -- 12 340463 58 ------ 720720
#include <iostream> using namespace std; int n,s,a1,b1,a2,b2,s1,s2; int gcd(int x,int y) { int t; while (x%y!=0) { t=x%y; x=y; y=t; } return y; } int f(int x,int y) { int t1=a1,t2=b1; a1=t1*y+b1*x; b1=t2*y; int t=a1/b1; s+=t; a1-=t*b1; t=gcd(a1,b1); a1=a1/t; b1=b1/t; } int main() { while (cin>>n) { s=0; a1=0;b1=1; for (int i=1;i<=n;i++) { f(n,i); } if (a1==0) cout <<s<<endl;//" "<<a1<<" "<<b1<<endl; else { int t1=0,t2=0,temp1=s,temp2=b1; while (temp1!=0) { t1++; temp1/=10; } t1++; while (temp2!=0) { t2++; temp2/=10; } for (int i=1;i<=t1;i++) cout <<" "; cout <<a1<<endl; cout <<s<<" "; for (int i=t2;i>=1;i--) cout <<"-"; cout <<endl; for (int i=1;i<=t1;i++) cout <<" "; cout <<b1<<endl; } } return 0; }