计蒜客合法分数的组合

Posted zzzyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客合法分数的组合相关的知识,希望对你有一定的参考价值。

输入一个自然数N,我们总可以得到一些满足“1≤b≤N,0≤a/b≤1”条件的最简分数a/b(分子和分母互质的分数),请找出所有满足条件的分数。

比方说,当N=5时,所有解为:

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

 

现在,你需要对于一个给定的自然数N,1≤N≤160,请编程按分数值递增的顺序输出所有解。

注:0和任意自然数的最大公约数就是那个自然数、互质指最大公约数等于1的两个自然数。

输入包括一个给个给定的自然数N

输出为一个列表,每个分数单独占一行,按照实际大小从小到大排列

样例输入

5

样例输出

0/1
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
1/1
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
struct fra
{
 float nu;
 float de;
};
fra N[100000];
bool judge(int m,int n)
{
 int t=1;
 while(1)
 {
 t=n%m;
 if(t==0)break;
 n=m;
 m=t;
    }
    if(m>1) return false;
    else  return true;
}
int main()
{
 float t,s;
    int n;
    fra temp;
    while(cin>>n)
    {
        int k=0;
     for(int i=2;i<n+1;i++)
     {
       for(int j=n;j>=i;j--)
          {
           if(i==2||judge(i-1,j))
           {
           N[k].de=j;
           N[k].nu=i-1;
             k++;
           }
          }
        }
        for(int i=0;i<k;i++)
        {
         for(int j=i+1;j<k;j++)
         {
          s=N[i].nu/N[i].de;
          t=N[j].nu/N[j].de;
            if(t<s)
   {
     temp=N[j];
     N[j]=N[i];
     N[i]=temp;
      }
   }
     }
     cout<<0<<"/"<<1<<endl;
        for(int i=0;i<k;i++)
         cout<<N[i].nu<<"/"<<N[i].de<<endl;
         cout<<1<<"/"<<1<<endl;
    }
}































































以上是关于计蒜客合法分数的组合的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯-计蒜客之墙壁涂色

计蒜客 掷骰子 dp

计蒜客练习题:素数距离

计蒜客NOIP模拟赛4 D2T1 鬼脚图

计蒜客--八皇后问题

计蒜客之判断质数