问题标题: 酷町堂:2638 分数排序

0
0
已解决
李素妍
李素妍
新手天翼
新手天翼

本以为没错,结果错了💢💢💢

#include<iostream>
#include<algorithm>
using namespace std;
int cnt;
int gcd(int x,int y){ 
    int r;
    while(x%y!=0){
        r=x%y;
        x=y;
        y=r;
    }
    return y;
}
struct fs{
    int jg,fm,fz;
}a[170];
bool cmp(fs s,fs d){
    return s.jg<d.jg;
}
int main(){
    int n;
    cin>>n;
    cout<<0<<"/"<<1<<endl;
    for(int i=1;i<=n;i++){
        for(int j=n;j>=i+1;j--){
            double k=i*1.0/j;
            if(gcd(i,j) && k<=1){
                cnt++;
                a[i].jg=1/j*i;
                a[i].fm=i;
                a[i].fz=j;
            }
        }
    }
    sort(a+1,a+cnt+1,cmp);
    for(int i=1;i<=cnt;i++){
        cout<<a[i].fz<<"/"<<a[i].fm<<endl;
    }
    cout<<1<<"/"<<1; 
    return 0;
}

李素妍在2020-07-14 19:09:01追加了内容

@柯以成

李素妍在2020-07-14 19:18:20追加了内容

柯先生

#include<iostream>
#include<algorithm>
using namespace std;
struct dddd{
    int a,b;
    double s;
}nn[111111];
int duan(int a,int b,int n){
    for(int i=2;i<=n;i++){
        if(a%i==0&&b%i==0)
            return 0;
    }
    return 1;
}
bool cmp(dddd x,dddd y){
    return x.s<y.s;
}
int main(){
    int n,k=0;
    cin>>n;
    cout<<"0/1"<<endl;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(i==1){
                nn[k].a=i;
                nn[k].b=j;
                nn[k].s=1.00*i/j;
                k++;
            }
            else if(duan(i,j,n)){
                nn[k].a=i;
                nn[k].b=j;
                nn[k].s=1.00*i/j;
                k++;
            }
        }
    }
    sort(nn+1,nn+k+1,cmp);
    for(int i=1;i<=k;i++){
        cout<<nn[i].a<<"/"<<nn[i].b<<endl;
    }
    cout<<"1/1"<<endl;
    return 0;
}

李素妍在2020-07-14 19:30:39追加了内容

#include<iostream>
#include<algorithm>
using namespace std;
struct dddd{
    int a,b;
    double s;
}nn[111111];
int duan(int a,int b,int n){
    for(int i=2;i<=n;i++){
        if(a%i==0&&b%i==0)
            return false;
    }
    return true;
}
bool cmp(dddd x,dddd y){
    return x.s<y.s;
}
int main(){
    int n,k=0,i,j;
    cin>>n;
    cout<<"0/1"<<endl;
    for(int i=1;i<n;i++){
        for(int j=i+1;j<=n;j++){
            if(i==1){
                nn[k].a=i;
                nn[k].b=j;
                nn[k].s=1.0*i/j;
                k++;
            } 
            else if(duan(i,j,n)){
                nn[k].a=i;
                nn[k].b=j;
                nn[k].s=1.0*i/j;
                k++;
            }
        }
    }
    sort(nn+1,nn+k+1,cmp);
    for(int i=1;i<=k;i++){
        cout<<nn[i].a<<"/"<<nn[i].b<<endl;
    }
    cout<<"1/1"<<endl;
    return 0;
}


1
已采纳
柯以成
柯以成
新手光能
新手光能

  sort(nn+1,nn+k+1,cmp);

改成

sort(nn,nn+k,cmp);

 

for(int i=1;i<=k;i++){
        cout<<nn[i].a<<"/"<<nn[i].b<<endl;
    }

改成

for(int i=0;i<k;i++){
        cout<<nn[i].a<<"/"<<nn[i].b<<endl;
    }

柯以成在2020-07-14 19:40:10追加了内容

采纳我

0
0
柯以成
柯以成
新手光能
新手光能

 a[i].jg=1/j*i;

 这个写错了,

应该是

a[i].jg=1.0*i/j;

还有循环判断时i=1时,所有都可以,所以要加个判断

   if(i==1){
                cnt++;
                a[i].jg=1.0*i/j;
                a[i].fm=i;
                a[i].fz=j;
            }

求采纳!!!

柯以成在2020-07-14 17:35:39追加了内容

@李素妍 

0
柯以成
柯以成
新手光能
新手光能

你结构体有问题!!!

看我给别人写的

0
我要回答