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

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);
}




已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页