该公司笔试题就1个,要求在10分钟内作完。 题目如下:用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列, 如:512234、412325等,要求:"4"不能在第三位,"3"与"5"不能相连。

来源:互联网 发布:excel 数据左上角 编辑:程序博客网 时间:2024/04/30 03:57

/*
该公司笔试题就1个,要求在10分钟内作完。
  题目如下:用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列,
  如:512234、412325等,要求:"4"不能在第三位,"3"与"5"不能相连。请问这题怎么做呢

*/

#include <cstdio>
using namespace std;

int p[] = {1, 2, 2, 3, 4, 5};
int A[6];
int n = 6;

void print_permutation(int cur);

int main()
{
    freopen("d://uva_out.txt", "w", stdout);
    print_permutation(0);
    return 0;
}

void print_permutation(int cur)
{
    int i, j, c1, c2;

    if (cur == n) {
        for (i = 0; i < n; i++) {
            if (i == 0)
                printf("%d", A[i]);
            else
                printf(" %d", A[i]);
        }
        printf("/n");
    } else {
        for (i = 0; i < n; i++)
            if (!i || p[i] != p[i - 1]) {
                c1 = c2 = 0;
                for (j = 0; j < cur; j++)
                    if (A[j] == p[i]) c1++;
                for (j = 0; j < n; j++)
                    if (p[i] == p[j]) c2++;

                if (c1 < c2) {
                    if (cur == 2 && p[i] == 4) continue;
                    if (cur > 0 && ((A[cur - 1] == 3 && p[i] == 5) || (A[cur - 1] == 5 && p[i] == 3))) continue;
                    A[cur] = p[i];
                    print_permutation(cur + 1);
                }
            }
    }
}

原创粉丝点击