参考代码:AC(递推,思路借鉴题号1117,“递推”)

#include <stdio.h>

int main()
{
    int i, n;
    long long res[21];
    while (scanf("%d", &n) != EOF)
    {
        res[2] = 1;
        res[3] = 2;
        res[4] = 9;
        if (n<=4)
        {
            printf("%d\n", res[n]);
            continue;
        }
        else
        {
            for (i=5;i<=n;i++)
                res[i]=(res[i-1]+res[i-2])*(i-1);//根据规律可知
            printf("%lld\n",res[n]);
        }
    }
    return 0;
}



参考代码:输出超限(DFS)

#include <stdio.h>
#include <stdlib.h>

int cnt,n;
int *num,*vis;

void dfs(int i)
{
    if(i==n+1)
    {
        cnt++;return;
    }
    int t;
    for(t=1;t<=n;t++)
    {
        if(!vis[t]&&t!=i)
        {
            num[i]=t;
            vis[t]=1;
            dfs(i+1);
            vis[t]=0;
        }
    }
    return;
}

int main()
{
    int i;
    while(scanf("%d",&n))
    {
        cnt=0;
        num=(int *)malloc(sizeof(int)*(n+1));
        vis=(int *)malloc(sizeof(int)*(n+1));
        for(i=0;i<=n;i++) {num[i]=i;vis[i]=0;}
        dfs(1);
        printf("%d\n",cnt);
        free(num);
    }
    return 0;
}







参考代码: 输出超限(全排列,类似题号1163,“排队买票”问题) 

#include <stdio.h>
#include <stdlib.h>
int cnt,n;
int *num;

void pmut(int i)
{
    int j,t,tmp;
    if(i<n)
    {
        for(j=i;j<=n;j++)
        {
            tmp=num[j];
            for(t=j;t>i;t--)
                num[t]=num[t-1];
            num[i]=tmp;

            pmut(i+1);

            for(t=i;t<j;t++)
                num[t]=num[t+1];
            num[j]=tmp;
        }
    }
    else
    {
        int flag=1;
        for(j=1;j<=n;j++)
            if(num[j]==j) {flag=0;break;}
        if(flag) cnt++;
    }
}


int main()
{
    int i;
    while(scanf("%d",&n))
    {
        cnt=0;
        num=(int *)malloc(sizeof(int)*(n+1));
        for(i=0;i<=n;i++) num[i]=i;
        pmut(1);
        printf("%d\n",cnt);
        free(num);
    }
    return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论