範例程式碼 uva1262

//uva1262
#include<cstdio>
#include<algorithm>

using namespace std;

int main()
{
    int cas, n, l[5], c[26];
    char c1[6][6], c2[6][6], c3[6][6];

    scanf("%d\n", &cas);
    while (cas--){
        scanf("%d\n", &n);
        for (int i = 0; i<6; i++)
            gets(c1[i]);

        for (int i = 0; i<6; i++)
            gets(c2[i]);

        fill(l, l + 5, 0);

        for (int i = 0; i<5; i++){
            char temp[12];
            int k = 0;

            fill(c, c + 26, 0);
            for (int j = 0; j<6; j++){
                for (int j1 = 0; j1<6; j1++){
                    if (c1[j][i] == c2[j1][i] && c[(int)(c1[j][i] - 'A')] == 0)
                        c3[i][k] = c1[j][i], k++, l[i]++, c2[j1][i] = 1, c[(int)(c1[j][i] - 'A')] = 1;
                }
            }
            sort(c3[i], c3[i] + k);
        }

        if (n>l[0] * l[1] * l[2] * l[3] * l[4])
            printf("NO\n");
        else {
            for (int i = 0; i<5; i++){
                int temp = 1;
                for (int j = i + 1; j<5; j++)
                    temp*= l[j];

                l[i] = (i != 4?(n-1) / temp:(n - 1) % l[i]);
                n-= l[i] * temp;
            }
            for (int i = 0; i<5; i++)
                printf("%c", c3[i][l[i]]);
            printf("\n");
        }
    }

    return 0;
}