题目:将所有真分数化简后排序,输出化简后的结果。
第一步,产生真分数
第二步,将分数结果排序,同时对对应的分子分子换序
第三步,化简 即分子分母同时除去最大公因子
#include <iostream>
using namespace std;
int gcd(int m, int n) //找公因数
{
if (m == n)
return m;
m > n ? gcd(m - n, n) : gcd(m, n - m);
}
void change(double a[], int i)
{
double tmp;
tmp = a[i];
a[i] = a[i + 1];
a[i + 1] = tmp;
}
int main()
{
double a[100], b[100], c[100] = {0};
for (int i = 0; i < 100; i++)
{
a[i] = rand() % 10 + 1; //分子
b[i] = rand() % 10 + 10; //随机输入真分数,分母
c[i] = a[i] / b[i];
}
for (int i = 0; i < 100; i++) //冒泡排序
for (int j = 0; j < 100 - i; j++)
{
if (c[j] > c[j + 1]) //C数组排序的时候 A B同时换位置 3个数组同时跳序
{
change(a, j);
change(b, j);
change(c, j);
}
}
for (int i = 0; i < 100; i++) //输出 a/公因子 / b/公因子
{
cout << a[i] / gcd(a[i], b[i]) << "/" << b[i] / gcd(a[i], b[i]) << endl;
}
return 0;
}