擅长排列的小明 II

来源:互联网 发布:js 字符串日期格式化 编辑:程序博客网 时间:2024/05/20 11:51

擅长排列的小明 II

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

小明十分聪明,而且十分擅长排列计算。

有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列:

1、第一个数必须是1

2、相邻两个数之差不大于2

你的任务是给出排列的种数。

输入
多组数据。每组数据中输入一个正整数n(n<=55).
输出
输出种数。
样例输入
4
样例输出
4
规律题:第i个和第i-1和第i-3有关系
打表法找规律:
#include<stdio.h>#include<iostream>#include<string.h>bool visit[100];int n,sum;void dfs(int sum1,int zhi){    if(sum1>n)    {        sum++;        return;    }    for(int i=zhi-2; i<=zhi+2&&i<=n; i++)    {        if(i>=1&&!visit[i])        {            visit[i]=true;            dfs(sum1+1,i);            visit[i]=false;        }    }}int main(){        printf("1\n");        for(n=2; n<=55; n++)        {            sum=0;            memset(visit,false,sizeof(visit));            visit[1]=true;            dfs(2,1);            printf("%d\n",sum);        }}

#include<stdio.h>#include<string.h>#include<iostream>#include<math.h>using namespace std;int a[56];int main(){    int n;    while(scanf("%d",&n)!=-1)    {        a[0]=0;       a[1]=1;       a[2]=1;       a[3]=2;       for(int i=4;i<=56;i++)       {           a[i]=a[i-1]+a[i-3]+1;       }        printf("%d\n",a[n]);    }}

0 0
原创粉丝点击