您的位置:首页 > 编程语言 > C语言/C++

擅长排列的小明 II

2015-04-23 15:25 288 查看

擅长排列的小明 II

时间限制:1000 ms  |  内存限制:65535 KB难度:3描述小明十分聪明,而且十分擅长排列计算。有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列:1、第一个数必须是12、相邻两个数之差不大于2你的任务是给出排列的种数。输入多组数据。每组数据中输入一个正整数n(n<=55).输出输出种数。样例输入
4
样例输出
4
打表找规律:
#include<iostream>#include <cstring>#include <cmath>using namespace std;int n;int f[60],a[60],sum;void dfs(int cnt){if (cnt+1==n){/*	for (int i=0;i<n;++i){cout << a[i] ;}cout << endl;*/sum++;return;}for (int i=2;i<=n;++i){if (!f[i]&&abs(a[cnt]-i)<=2){a[++cnt]=i;f[i]=1;dfs(cnt);f[i]=0;cnt--;}}}int main(){for(int i=1;i<=55;++i){n=i;memset(f,0,sizeof(f));sum=0;a[0]=1;dfs(0);cout << sum << '\t';if (n%5==0){cout << endl;}}return 0;}
AC代码:
#include <stdio.h>int main(){int i,f[60],n;f[1]=f[2]=1; f[3]=2;for(i=4;i<56;i++)f[i]=f[i-1]+f[i-3]+1;while(scanf("%d",&n)!=EOF) printf("%d\n",f);return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++