1,2,3,4,5,6,7,8,9共9个数组成3个分数
程序员文章站
2022-07-15 12:07:35
...
MixCMul最小公倍数函数,方便分数计算,避免小数
printmol 将一个固定数组得到三个分数, 判断两分数相加是否等于第三个
printmol 将一个固定数组得到三个分数, 判断两分数相加是否等于第三个
Grial 数组的各种排列
不说了,看代码:
static void showArr(int arr[], int len = 9)
{
cout<<arr[0];cout<<"/";
cout<<arr[1];
cout<<arr[2];cout<<" + ";
cout<<arr[3];cout<<"/";
cout<<arr[4];
cout<<arr[5];cout<<" = ";
cout<<arr[6];cout<<"/";
cout<<arr[7];
cout<<arr[8];
cout<<endl;
}
// 求最大公倍数
static int MixCMul(int a, int b)
{
int max = a>b?a:b;
while (true)
{
if (max%a == 0 && max%b == 0)
break;
max++;
}
return max;
}
static void printmol(int arr[], int len = 9)
{
int mol[3] = {0}; // 分子
int Den[3] = {0}; // 分母
// 按倍数扩充后的,方便比较
int temmol[4] = {0}; // 分子
int MixCMul1, MixCMul2;
for (size_t i = 0; i < 3; i++)
{
mol[i] = arr[i*3];
Den[i] = arr[i*3+1]*10 + arr[i*3+2];
}
// 计算第一和第二个分数分母的最小公倍数,同时扩大分子
MixCMul1 = MixCMul(Den[0], Den[1]);
temmol[0] = MixCMul1/Den[0] * mol[0];
temmol[1] = MixCMul1/Den[1] * mol[1];
// 第一第二分数的分子相加,存到第四个分数
temmol[3] = temmol[0] + temmol[1];
// 再计算第一和第三个分数分母的最小公倍数,同时扩大分子
MixCMul2 = MixCMul(MixCMul1, Den[2]);
temmol[3] = temmol[3]* (MixCMul2 / MixCMul1);
temmol[2] = mol[2]* (MixCMul2 / Den[2]) ;
// 第一第三分数的分子比较
if (temmol[3] == temmol[2])
{
showArr(arr);
}
}
// 数组的各种排列
static void Grial(int a[], int n,int m)
{
if (n == m)
{
/* for (int i = 0; i < m; i++)
cout << a[i] << " ";
cout <<endl;*/
printmol(a);
}
else
{
for (int i = n; i < m; i++)
{
std::swap(a[i],a[n]);
Grial(a,n+1,m);
std::swap(a[i],a[n]);
}
}
}
void main()
{
#define ARR_NUM 9
int arr[ARR_NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
Grial(arr, 0, ARR_NUM);
}