演算法:12 個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?
阿新 • • 發佈:2018-12-11
自己去動手寫了一下,記錄下來
#include "pch.h" #include <iostream> int count = 0;//記錄共count種排列 void fun(int pai1[], int p1, int pai2[], int p2, int number, int i); void printArr(int arr[], int len); int main() { const int number = 12;//共12個人 int pai1[number / 2];//第一排人陣列 int pai2[number / 2];//第二排人陣列 fun(pai1, 0, pai2, 0, number, 1); std::cout << "共" << count << "種結果"; } void fun(int pai1[], int p1, int pai2[], int p2, int number, int i) { if (i > number) { count++; std::cout << "=================\n"; std::cout << count << "\n"; printArr(pai1, number / 2); printArr(pai2, number / 2); return; } if (p1 == p2) { pai1[p1] = i; fun(pai1, p1 + 1, pai2, p2, number, i + 1); } else { if (p1 < number / 2) { pai1[p1] = i; fun(pai1, p1 + 1, pai2, p2, number, i + 1); pai1[p1] = 0; } pai2[p2] = i; fun(pai1, p1, pai2, p2 + 1, number, i + 1); } } void printArr(int arr[], int len) { for (int i = 0;i < len; i++) std::cout << arr[i] << " "; std::cout << "\n"; }