类24点

作者在 2014-07-07 19:08:41 发布以下内容

123456789在这些数之间可以差如+,-,最后等于某个值的组合数

方法一:递归法


void f2(int index,int opt,int sum,int value,int &count)
{
	for(int i=index;i<=9;i++){
		int t=0;
		for(int m=index;m<=i;m++)	t=10*t+m;
		if(i==9){
			sum=sum+opt*t; 
 			if(value==sum) count++;
			return ;
		}
		f2(i+1,1,sum+opt*t,value,count);
		f2(i+1,-1,sum+opt*t,value,count);
	}
}
方法二:循环

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<queue>


int main()
{
	long long temp=1;
	int count=0;
	int op[8];
	int input;
	scanf("%d",&input);
	long long data=(long long )input;
	for(op[0]=-1;op[0]<2;op[0]++)
	{
	for(op[1]=-1;op[1]<2;op[1]++)
	{
	for(op[2]=-1;op[2]<2;op[2]++)
	{
	for(op[3]=-1;op[3]<2;op[3]++)
	{
	for(op[4]=-1;op[4]<2;op[4]++)
	{
	for(op[5]=-1;op[5]<2;op[5]++)
	{
	for(op[6]=-1;op[6]<2;op[6]++)
	{
	for(op[7]=-1;op[7]<2;op[7]++)
	{
		temp=1;
		std::queue<long long> num_que;
		std::queue<int> opt;
		for(int i=0;i<8;i++)
		{
			if(op[i]){
				num_que.push(temp);
				temp=i+2;
				opt.push(op[i]);
			}
			else
			{
				temp=temp*10+i+2;
			}
		}
		num_que.push(temp);
		temp=num_que.front();
		num_que.pop();
		while(!num_que.empty())
		{
			long long opt_t=(long long )opt .front();
			temp=temp+num_que.front()*opt_t;
			num_que.pop();
			opt.pop();
		}
		if(temp==data) count++;
	}
	}
	}
	}
	}
	}
	}
	}
	printf("%d\n",count);
}
方法三:三叉树路径



数据结构 | 阅读 1234 次
文章评论,共0条
游客请输入验证码
最新评论