C++12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

#include <iostream>
#define DefaultSize 9
//问题描述:
//12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
using namespace std;
class Grial
{
	public:
	Grial(int sz=DefaultSize)
	{
		visted = new bool [sz];
		data = new int [sz];
		size = sz;
		for(int i=1;i<=sz;i++)
		{
			visted[i]=0;
		}
	}
	bool check(int a[])
	{
		if(
				(a[1]<a[2]&&a[2]<a[3]&&a[3]<a[4]&&a[4]<a[5]&&a[5]<a[6]&&
				 a[1]>a[7]&&a[2]>a[8]&&a[3]>a[9]&&a[4]>a[10]&&a[5]>a[11]&&a[6]>a[12]&&
				 a[7]<a[8]&&a[8]<a[9]&&a[9]<a[10]&&a[10]<a[11]&&a[11]<a[12]
			  )
			)
				return true;
		return false;
	}
	void Insert(int start)
	{
		if(start==size+1)
			{
				int k = 0;
				if(check(data))
					{
						for(int i=1;i<=size;i++)
						{
							cout<<data[i]<<"    ";
							k++;
							if(k%6==0)cout<<endl;
						}
					cout<<"\033[35m-------------------------------------------------\033[0m"<<endl;
					}
					return ;
			}
			else
			{
				for(int i=1;i<=size;i++)
				{
					if(visted[i]==0)
						{
							data[start]=i;
							visted[i]=1;
							Insert(start+1);
							visted[i]=0;
						}
				}
			}
	}
	private:
	int size;
	bool *visted;
	int *data;
};
int main()
{
	Grial g(12);
	g.Insert(1);
	return 0;
}

时间: 2024-10-13 01:51:08

C++12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?的相关文章

java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

此题参考与其他人思路, 2个解题方式. 1. 1 /** 2 * 用java代码实现:12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 3 * 状态树方式解 4 * 用状态生成树的方式来做的,先把12个人按从低到高一次编号, 5 * 从(1 ; 2)出发,加入3和4的时候生成(1,3 ; 2,4)和(1,2 ; 3,4), 6 * 然后加入5和6,分别从前面的两个状态出发,可以生成5种状态,就是说6个人时有5种排列 7 * @author

【编程题目】12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,

80.阿里巴巴一道笔试题(运算.算法)问题描述:12 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 我的思路:输入从小到大排列的数字  把数字4个分为一组 如下: min **** B A    **** max 其中第一个数字一定是当前最小的, 最后一个数字一定是当前最大的. 其次,设位置A .B,这样去掉这四个数字, 问题又变成了规模小一些的同样的问题. 关键是A和B的确定,有很多种可能,我们依次尝试,如果不满足问题的条件了,就退出来

计算器的方式有多少种?

今天一个同事问了我个问题,问我要实现一个计算器的方式有多少种?突然感到有种想笑的冲动,何故问这样的问题呢?他说C#是种非常美妙的语言,设计的又非常完美,我想知道这样的语言那把这个简单的问题如何的实现!我大致想了想也确实如此.在此想和大家分享一下计算器的实现心得! 要实现这样一个功能实在是太容易了,就看你怎样的想去实现它了,本人分析了以下八种供大家参考: 001.计算器的面向过程版本? 002.计算器的面向对象版本? 003.计算器的工厂模式版本? 004.计算器的多态抽象方法版本? 005.计算

解锁图案-九宫格有多少种组合?安全吗?用程序来解答

如图所示的九宫格密码有多少种组合呢?这么密码是不是比数字密码更安全呢?下面用数字来说话. 通常设置密码至少4个点,最多9个点,规则通常是两点之间有一点,必须要过中间这个点,比如从1开始,必须要经过2才可以到3.1是可以直接到6的,但通常这种设置比较少. 运行附录的程序得到如下的数据:size: 4 count0: 144 count1: 96 count2:40size: 5 count0: 600 count1: 336 count2:152size: 6 count0: 2880 count

【编程题目】四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())

46.搜狐(运算):四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(()) 跟12个人排高矮的题目差不多. 用 0 表示 “(”,用 1 表示“)” 则需要数字二进制最低8位有 4个1和 4个0,且从低位到高位对1 和 0 计数时,0 出现的次数不能超过 1 出现的次数. /* 46.搜狐(运算): 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(()) */ #include <stdio.h> int c_bits(int n) { int re

!HDU 4346 插旗子RGR的插法有多少种-思维&amp;正难则逆&amp;思维!

题意:只有R和G两种旗子,美丽的插法是存在两个R的中点插G的情况,现在给你一个字符串代表现在有些地方已经插了,求美丽的插法有多少种 分析: 美丽=总 - 不美丽 所以我们来求不美丽有多少种. 这里就是思维的问题了:一个不美丽的序列必须满足的条件是任何两个相邻R的距离为奇数并且所有的相邻R的距离相等. 奇数这是显然的,如果两个相邻的R不为奇数,那么它们的中点存在,并且是G,这与不美丽矛盾: 距离相等也很好证:设三个相邻的R,R1R2的距离为x1,R2R3的距离为x2,则R1R3=x1+x2,因为x

软件开发有多少种方式

软件开发有多少种方式: Build To Learn Build To Show Build To Serve Build To Win 其中Build To Win是我们所学习的构建之法中的核心思想.软件开发是为了什么,是为了市场.赢得了市场,就是这个软件最大的成功.当然一个软件能够成功.就需要在工作中一视同仁,不能有高低贵贱之分.听取小组中每位成员的建议.并且每位程序员也能有很强的工作能力,所以我们必须要在平时的学习在加强对工作能力的训练.为未来的就业打好基础!

c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法? 解:把n级台阶时的跳法记为f(n),当n>2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2);因此n级台阶时的跳法为f(n)=f(n-1)+f(n-2).不难看出这实际是斐波拉契数列的变形应用,把斐波拉契数列的每一项向前移动了1位. 程序:

!HDU 4359 左子树节点和小于右子树的树有多少种-dp

题意:n个节点,每个节点的权值为2^0,2^1....2^(n-1),求满足任何节点的左子树的节点和小于右子树的节点和的分配方案有多少种 分析: 由于等比数列的性质:1+2+....2^(k-1)<2^k,所以除了根节点的权值以外的,最大值必须在右子树,其余节点随意. 情况有:1.只有左子树,2.只有右子树,3.都有 dp[i][j]:表示选i个节点深度<=j的树的分配方案 转移:dp[i][j]+=C(i-2,k)*dp[k][j-1]*dp[i-1-k][j-1],这里用到了组合数性质,或