1,2,3,4,5,6,7,8,9共9個數組成3個分數
阿新 • • 發佈:2019-01-25
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); }