新写两个函数,一个是求最大公约数的函数,一个是排序函数。
最简真分数,就是分子和分母最大公约数为1
按降序排列,把一个元素插入一个有序队列中。
#include
struct struct_result{
int numerator;
int denominator;
float result;
};
struct struct_result list[999]={0};
int listLength = 0;
int getMaxFactor(int m, int n){
int r = m % n;
while(r > 0){
m = n;
n = r;
r = m % n;
}
return n;
}
void addList(struct struct_result res){
int i,j;
//添加进列表中
for(i=0; iif(list[i].result > res.result){
break;
}
}
if(i//找到自己所在的位置
for(j=listLength; j>i; j--){
list[j] = list[j-1];
}
list[i] = res;
listLength++;
} else {
//添加到列表末尾
list[listLength++] = res;
}
}
int main(){
int n = 5;
int i,j;
printf("请输入一个正整数:");
scanf("%d", &n);
for(i=1; ifor(j=i+1; j<=n; j++){
if(1 == getMaxFactor(j, i)){
//找到一个符合条件的结果
struct struct_result res;
res.numerator = i;
res.denominator = j;
res.result = 1.0f*i/j;
addList(res);
}
}
}
for(i=0; iprintf("%d/%d ", list[i].numerator, list[i].denominator);
if(i>0 && i % 10 == 0){
printf("\n");
}
}
}