首页 > 其他 > 详细

面试题目

时间:2019-11-16 12:05:55      阅读:80      评论:0      收藏:0      [点我收藏+]

八皇后

#include <stdio.h>
#include <math.h>
#include <string.h>
int x[11], num;
bool Place(int k)
{
    int i = 1;
    while (i < k)
    {
        if (x[i] == x[k] || fabs(x[i] - x[k]) == fabs(i - k))
            return false;
        i = i + 1;
    }
    return true;
}
void Print(int x[], int n)
{
    printf("case%d:\n", ++num);
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (j != 1)
                printf(" ");
            if (j == x[i])
                printf("1");
            else
                printf("0");
        }
        printf("\n");
    }
}
void NQueens(int n)
{
    int k = 1;
    x[1] = 0;
    while (k > 0)
    {
        x[k] += 1;
        while (x[k] <= n && !Place(k))
            x[k] += 1;
        if (x[k] <= n)
        {
            if (k == n)
                Print(x, n);
            else
            {
                k = k + 1;
                x[k] = 0;
            }
        }
        else
            k--;
    }
}
int main()
{
    int n, f = 0;
    while (scanf("%d", &n), n != -1)
    {
        if (f)
            printf("\n");
        num = 0;
        memset(x, 0, sizeof(x));
        NQueens(n);
        printf("There are %d kinds of\n", num);
        f = 1;
    }
}

一个序列,求位置。这个位置左边的数比他小,右边的比他大

这个需要搞个数组记录下,最远到哪里

 

面试题目

原文:https://www.cnblogs.com/BobHuang/p/11870936.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!