zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    ? ?? 类?
    类 建索引
    访问局域网计算机文件
    JS 在元素后面添加新的元素
    js 网页加载完毕,执行js函数
    设置快捷键(3种方式)
    winform设置textbox设置水印
    ADO.NET 学生管理
    C#整理 条件语句
    ADO.NET 数据访问类查询、属性扩展
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3274714.html
Copyright © 2011-2022 走看看