Ordered Fractions chapter 2.1
第一次直接生成所有+insertsort case11超时,后来想了下把分子分母能同时除2,3,5,7全部去掉,勉强过了
1 /* 2 3 ID: hubiao cave 4 5 PROG: frac1 6 7 LANG: C++ 8 9 */ 10 11 12 13 14 #include<iostream> 15 16 #include<fstream> 17 18 #include<string> 19 20 using namespace std; 21 22 23 int ary[2][160*160]; 24 void insert(float a,float b,int count); 25 bool CanAdd(int fz,int fm); 26 int main() 27 { 28 29 30 ifstream fin("frac1.in"); 31 ofstream fout("frac1.out"); 32 33 34 int N; 35 int count=0; 36 fin>>N; 37 //cin>>N; 38 ary[0][0]=0; 39 ary[1][0]=1; 40 count++; 41 42 for(int i=N;i>=1;i--) 43 { 44 if(i==1) 45 ary[1][count]=ary[0][count]=1; 46 47 for(int j=1;j<i;j++) 48 { 49 if(CanAdd(j,i)) 50 { 51 insert(j,i,count); 52 count++; 53 } 54 } 55 } 56 57 float t=2; 58 //float fz; 59 //float fm; 60 for(int i=0;i<=count;i++) 61 { 62 if(t!=(float)ary[0][i]/(float)ary[1][i]) 63 { 64 int j=i+1; 65 while((float)ary[0][i]/(float)ary[1][i]==(float)ary[0][j]/(float)ary[1][j]) 66 { 67 j++; 68 } 69 70 fout<<ary[0][j-1]<<"/"<<ary[1][j-1]<<endl; 71 t=(float)ary[0][i]/(float)ary[1][i]; 72 i=j-1; 73 // fz=ary[0][i]; 74 //fm=ary[1][i]; 75 } 76 77 } 78 79 return 0; 80 81 82 } 83 void insert(float a,float b,int count) 84 { 85 float key=a/b; 86 int i; 87 for( i=count-1;i>=0;i--) 88 { 89 float fz=ary[0][i]; 90 float fm=ary[1][i]; 91 92 if(fz/fm>key) 93 { 94 ary[0][i+1]=fz; 95 ary[1][i+1]=fm; 96 } 97 else 98 break; 99 } 100 ary[0][i+1]=a; 101 ary[1][i+1]=b; 102 } 103 104 bool CanAdd(int fz,int fm) 105 { 106 if(!(fz%2)&&!(fm%2)) 107 return false; 108 if(!(fz%3)&&!(fm%3)) 109 return false; 110 if(!(fz%5)&&!(fm%5)) 111 return false; 112 if(!(fz%7)&&!(fm%7)) 113 return false; 114 return true; 115 116 }