先將所有字典排序的結果儲存在陣列中
再計算 GCD 值
字典排序介紹 : http://dreamisadream97.pixnet.net/blog/post/281211724
#include <iostream>
#include <algorithm>
#define PER_MAX 6
const int exp[7] = {1, 1, 2, 6, 24, 120, 720};
using namespace std;
string next_permutation(string list, const int len)
{
for (int i=len-1; i>0; i--)
if (list[i-1] < list[i])
{
int j = len-1;
while (list[i-1] >= list[j]) j--;
swap(list[i-1], list[j]);
reverse(&list[i], &list[len]);
break;
}
return list;
}
int main()
{
string per[PER_MAX+1][exp[PER_MAX]] = {{}, {"1"}, {"12"}, {"123"}, {"1234"}, {"12345"}, {"123456"}};
for(int i = 2; i<=PER_MAX; i++)
for(int j = 1; j<exp[i]; j++)
per[i][j] = next_permutation(per[i][j-1], i);
int N;
string input;
int idx1, idx2;
while(cin >> N){
while(N--){
cin >> input >> idx1 >> idx2;
idx1 -= 1;
idx2 -= 1;
int len = input.length();
int num1 = 0, num2 = 0;
for(int i = 0; per[len][idx1][i]; i++)
num1 = num1*10 + per[len][idx1][i] - '0';
for(int i = 0; per[len][idx2][i]; i++)
num2 = num2*10 + per[len][idx2][i] - '0';
cout << __gcd(num1, num2) << endl;
}
return 0;
}