按升序打印出所有分子分母由1..n中的整数构成的最简真分数,不许先举出再排序,这道题大家有什么好意见,100分相求,即刻给分!

ata100 2002-05-13 06:22:08
好比n=5,那么就是

1/5 1/4 2/5 1/3 1/2 2/3 3/5 4/5

关键是不许先举出再排序。有什么好算法?
...全文
88 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobfang 2002-05-14
  • 打赏
  • 举报
回复
在输出时,先要将i/M化简为x/y,若y>N,则不用输出。
bobfang 2002-05-14
  • 打赏
  • 举报
回复
如果N不大,可以先求出1到N的最大公倍数M,然后输出i/M,i从1到M-1。
ata100 2002-05-13
  • 打赏
  • 举报
回复
for(i=2;i <=n;i++){
r+=a;
if(r >=b)r-=b;
if((b-r)*max_i <(b-max_r)*i){
max_r=r;
max_i=i;
}
这段里给我注释看看可以么?我没看明白。
mathe 2002-05-13
  • 打赏
  • 举报
回复
刚才不对,这个怎么样

void next(int a,int b,int n, int* c,int* d)
{
int i;
int max_i=1;
int max_r=a%b;
int r=max_r;
for(i=2;i<=n;i++){
r+=a;
if(r>=b)r-=b;
if((b-r)*max_i<(b-max_r)*i){
max_r=r;
max_i=i;
}
}
*d=max_i;
*c=(a* *d+ b-1)/b;
}


#define N 5
int main()
{
int a,b;
a=1;b=N;
do
{
printf("%d/%d\n",a,b);
next(a,b,N,&a,&b);
}while(a!=1||b!=1);
return 0;
}
mathe 2002-05-13
  • 打赏
  • 举报
回复
;this function will return c/d that following a/b.
void next(int a,int b,int n, int& c,int& d)
{
int i;
int max_i=1;
int max_r=a%b;
int r=max_r;
for(i=2;i<=n;i++){
r+=b;
if(r>b)r-=b;
if(r>max_r){
max_r=r;
max_i=i;
}
}
d=max_i;
c=(a*d+d-1)/b;
}


#define N 5
int main()
{
int a,b;
a=1;b=N;
do
{
next(a,b,N,&a,&b);
}while(a!=N||b!=1);
return 0;
}

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧