先將所有字典排序的結果儲存在陣列中

再計算 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;
}

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()