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 }

 

posted @ 2013-08-22 13:50  cavehubiao  阅读(156)  评论(0编辑  收藏  举报