usaco 2.1.2 frac1
2012-07-20 11:12
381 查看
呃 貌似这道题有很好的方法,不过我已经用笨方法一次过了,就没有再多研究了。我的方法就是枚举加排列,用结构体存分子分母和值,遇到可以约分的略过……下面贴出代码,以作纪念。
View Code
View Code
/*{ ID:jzy3209981 PROG:frac1 LANG:C++ }*/ #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> using namespace std; struct fraction { int son; int mum; double result; }; int com(int a,int b) { int e; while(a%b!=0) { e=b; b=a%b; a=e; } return b; } void paixu(fraction *first,int a,int b) { int i,j; i=a;j=b; fraction cha=first[a]; if(i>=j) return; while(i<j) { while(first[j].result>=first[i].result&&i<j) j--; if(i<j) { first[i]=first[j]; first[j]=cha; i++; } while(first[i].result<=first[j].result&&i<j) i++; if(i<j) { first[j]=first[i]; first[i]=cha; j--; } } paixu(first,a,i-1); paixu(first,i+1,b); } int main() { freopen ("frac1.in","r",stdin); freopen ("frac1.out","w",stdout); int n,i,j,common,num=0; fraction *all; scanf("%d",&n); all=new fraction[n*n+2*n+1]; for(i=2;i<=n;i++) for(j=1;j<i;j++) { if(j>1) { common=com(j,i); if(common!=1) continue; } all[num].son=j; all[num].mum=i; all[num].result=(double)j/i; num++; } paixu(all,0,num-1); printf("0/1\n"); for(i=0;i<num;i++) printf("%d/%d\n",all[i].son,all[i].mum); printf("1/1\n"); return 0; }
相关文章推荐
- usaco2.1.2——frac1
- USACO-2.1.2- Ordered Fractions
- Ordered Fractions(USACO 2.1.2)
- USACO 2.1.2 Ordered Fractions
- USACO2.1.2 Ordered Fractions (frac1)
- [USACO 2.1.2] Ordered Fractions
- Usaco 2.1.2 顺序的分数(Ordered Fractions)
- usaco2.1.2(frac1)
- USACO 2.1 frac1
- USACO:2.1.2 Ordered Fractions 顺序的分数
- USACO 2.1 frac1
- USACO2.1.2 Ordered Fractions (frac1)
- USACO 2.1.2 Ordered Fractions
- USACO 2.1.2 Ordered Fractions
- usaco2.1.2-----orderd fractions(欧几里的)
- USACO2.1.2--Ordered Fractions
- usaco 2.1 frac1 2008.5.10
- 【排序】【USACO2.1.2】顺序的分数
- 【USACO题库】2.1.2 Ordered Fractions顺序的分数.tj
- ordered fractions_usaco2.1.2_codevs2042