问题描述 :
输入一个自然数N,请写一个程序来增序输出分母小于等于N的既约真分数(即无法再进行约分的小于1的分数)
输入说明 :
单独的一行,一个自然数N(1…20)
输出说明 :
每个分数单独占一行
按照分数大小升序排列
对于分子为0的分数,仅输出0/1,不输出其它分母的分数,比如0/2, 0/3。
输入范例 :
4
输出范例 :
0/1
1/4
1/3
1/2
2/3
3/4
c++:
#include <bits/stdc++.h>
using namespace std;
struct decimal{
int molecular;
int denominator;
};
bool haveSame(int i,int j){
int begin=2;
while(begin<=i&&begin<=j){
if(i%begin==0&&j%begin==0){
return true;
}
begin++;
}
return false;
}
void bubbleSort(decimal d[],int len){
for(int i=0;i<len;i++){
for(int j=0;j<len-i-1;j++){
double num1=(d[j].molecular*1.0)/d[j].denominator;
double num2=(d[j+1].molecular*1.0)/d[j+1].denominator;
if(num1>num2){
decimal temp=d[j];
d[j]=d[j+1];
d[j+1]=temp;
}
}
}
}
int main(){
int n;
cin>>n;
decimal d[100];
int begin=1;
d[0].molecular=0;
d[0].denominator=1;
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
if(!haveSame(i,j)||i/j==i){
d[begin].molecular=j;
d[begin].denominator=i;
begin++;
}
}
}
bubbleSort(d,begin);
for(int i=0;i<begin;i++){
printf("%d/%d
",d[i].molecular,d[i].denominator);
}
return 0;
}