您的位置:首页 > 其它

擅长排列的小明 II

2017-01-13 08:56 260 查看

擅长排列的小明 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
);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: