您的位置:首页 > 其它

Ordered Fractions chapter 2.1

2013-08-22 13:50 302 查看
第一次直接生成所有+insertsort case11超时,后来想了下把分子分母能同时除2,3,5,7全部去掉,勉强过了

/*

ID: hubiao cave

PROG: frac1

LANG: C++

*/

#include<iostream>

#include<fstream>

#include<string>

using namespace std;

int ary[2][160*160];
void insert(float a,float b,int count);
bool CanAdd(int fz,int fm);
int main()
{

ifstream fin("frac1.in");
ofstream fout("frac1.out");

int N;
int count=0;
fin>>N;
//cin>>N;
ary[0][0]=0;
ary[1][0]=1;
count++;

for(int i=N;i>=1;i--)
{
if(i==1)
ary[1][count]=ary[0][count]=1;

for(int  j=1;j<i;j++)
{
if(CanAdd(j,i))
{
insert(j,i,count);
count++;
}
}
}

float t=2;
//float fz;
//float fm;
for(int i=0;i<=count;i++)
{
if(t!=(float)ary[0][i]/(float)ary[1][i])
{
int j=i+1;
while((float)ary[0][i]/(float)ary[1][i]==(float)ary[0][j]/(float)ary[1][j])
{
j++;
}

fout<<ary[0][j-1]<<"/"<<ary[1][j-1]<<endl;
t=(float)ary[0][i]/(float)ary[1][i];
i=j-1;
// fz=ary[0][i];
//fm=ary[1][i];
}

}

return 0;

}
void insert(float a,float b,int count)
{
float key=a/b;
int i;
for( i=count-1;i>=0;i--)
{
float fz=ary[0][i];
float fm=ary[1][i];

if(fz/fm>key)
{
ary[0][i+1]=fz;
ary[1][i+1]=fm;
}
else
break;
}
ary[0][i+1]=a;
ary[1][i+1]=b;
}

bool CanAdd(int fz,int fm)
{
if(!(fz%2)&&!(fm%2))
return false;
if(!(fz%3)&&!(fm%3))
return false;
if(!(fz%5)&&!(fm%5))
return false;
if(!(fz%7)&&!(fm%7))
return false;
return true;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: