欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1,2,3,4,5,6,7,8,9共9个数组成3个分数

程序员文章站 2022-07-15 12:07:35
...
MixCMul最小公倍数函数,方便分数计算,避免小数
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);
}

1,2,3,4,5,6,7,8,9共9个数组成3个分数



相关标签: 函数