hiho一下 第九十八周 题目1 : 搜索一·24点

题目1 : 搜索一·24点

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

周末,小Hi和小Ho都在家待着。

在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。

小Ho:玩点什么好呢?

小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。

小Ho:好啊,好啊。

<经过若干局游戏之后>

小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?

小Hi:让我想想。

<过了几分钟>

小Hi:我知道了!其实很简单嘛。

提示:24点

输入

第1行:1个正整数, t,表示数据组数,2≤t≤100。

第2..t+1行:4个正整数, a,b,c,d,1≤a,b,c,d≤10。

输出

第1..t行:每行一个字符串,第i行表示第i组能否计算出24点。若能够输出"Yes",否则输出"No"。

样例输入
2
5 5 5 1
9 9 9 9
样例输出
Yes
No

搜索  遍历所有可能的情况就可以了。。。

#include <stdio.h>
#include <math.h>
double num[4];
bool dfs(int n)
{
	if(n==1)
	{
		//n=1时  最终的结果保存在num[0]
		if(fabs(num[0]-24)<0.000001)
		return true;
		else
		return false;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			double x=num[i];
			double y=num[j];
			//已经使用过的数 使它等于最后一个数
			num[j]=num[n-1];
			num[i]=x+y;if(dfs(n-1)) return true;
			num[i]=x-y;if(dfs(n-1)) return true;
			num[i]=y-x;if(dfs(n-1)) return true;
			num[i]=x*y;if(dfs(n-1)) return true;
			//避免除0
			if(y)
			{
				num[i]=x/y;
				if(dfs(n-1)) return true;
			}
			//避免除0
			if(x)
			{
				num[i]=y/x;
				if(dfs(n-1)) return true;
			}
			//回溯
			num[i]=x;
			num[j]=y;
		}
	}
	return false;
}
int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%lf %lf %lf %lf",&num[0],&num[1],&num[2],&num[3]);
		if(dfs(4))
		puts("Yes");
		else
		puts("No");
	}
	return 0;
} 

题目1 : 搜索一·24点

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

周末,小Hi和小Ho都在家待着。

在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。

小Ho:玩点什么好呢?

小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。

小Ho:好啊,好啊。

<经过若干局游戏之后>

小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?

小Hi:让我想想。

<过了几分钟>

小Hi:我知道了!其实很简单嘛。

提示:24点

输入

第1行:1个正整数, t,表示数据组数,2≤t≤100。

第2..t+1行:4个正整数, a,b,c,d,1≤a,b,c,d≤10。

输出

第1..t行:每行一个字符串,第i行表示第i组能否计算出24点。若能够输出"Yes",否则输出"No"。

样例输入
2
5 5 5 1
9 9 9 9
样例输出
Yes
No

搜索  遍历所有可能的情况就可以了。。。

#include <stdio.h>
#include <math.h>
double num[4];
bool dfs(int n)
{
	if(n==1)
	{
		//n=1时  最终的结果保存在num[0]
		if(fabs(num[0]-24)<0.000001)
		return true;
		else
		return false;
	}
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			double x=num[i];
			double y=num[j];
			//已经使用过的数 使它等于最后一个数
			num[j]=num[n-1];
			num[i]=x+y;if(dfs(n-1)) return true;
			num[i]=x-y;if(dfs(n-1)) return true;
			num[i]=y-x;if(dfs(n-1)) return true;
			num[i]=x*y;if(dfs(n-1)) return true;
			//避免除0
			if(y)
			{
				num[i]=x/y;
				if(dfs(n-1)) return true;
			}
			//避免除0
			if(x)
			{
				num[i]=y/x;
				if(dfs(n-1)) return true;
			}
			//回溯
			num[i]=x;
			num[j]=y;
		}
	}
	return false;
}
int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%lf %lf %lf %lf",&num[0],&num[1],&num[2],&num[3]);
		if(dfs(4))
		puts("Yes");
		else
		puts("No");
	}
	return 0;
} 
时间: 2024-10-03 22:29:13

hiho一下 第九十八周 题目1 : 搜索一·24点的相关文章

hihoCoder hiho一下 第四十八周 题目1 : 拓扑排序&#183;二

题意:给定一个拓扑图,其中部分结点含有1个病毒,每个结点只要收到病毒就会立即往出边所能到达的点传播,病毒数可叠加,求所有结点的病毒数总和. 思路:根据拓扑的特点,每个入度为0的点肯定不会再被传播病毒,而且会将自己的所有病毒向与其相连的结点传播.那么可以从入度味为0的点着手,逐个删除入度为0的结点,在删除的过程中,更新与其相连的结点的病毒数(即将病毒数累加到该结点),到最后所有结点都没了,各个结点所累积的病毒数的和就是答案. 1 #include<bits/stdc++.h> 2 using n

hiho一下 第九十五周 数论四&#183;扩展欧几里德

题目 : 数论四·扩展欧几里德 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho周末在公园溜达.公园有一堆围成环形的石板,小Hi和小Ho分别站在不同的石板上.已知石板总共有m块,编号为 0..m-1,小Hi一开始站在s1号石板上,小Ho一开始站在s2号石板上. 小Hi:小Ho,你说我们俩如果从现在开始按照固定的间隔数同时同向移动,我们会不会在某个时间点站在同一块石板上呢? 小Ho:我觉得可能吧,你每次移动v1块,我移动v2块,我们看能不能遇上好了. 小

一十八周入侵前端进行时!

现在的时间是:2015年3月28日 18:06:06,刚刚从图书馆飞奔归来,坐在图书馆想了一个多小时,嗯,整个计划应运而生,十八周入侵前端! 先介绍下我自己吧,我是一名大三的学生,在大连,大二的时候开始接触编程,从JAVA到PHP,在到前端,都曾涉猎,但是样样都是门外汉,今年年初的时候,决定毕业以后奔往帝都,以前端工程师的身份进入互联网行业,未来的职业生涯规划也将以此起步. 从年初到现在,断断续续的,乱七八糟的,现在有些太浮躁,所以决定静下心,不再朝三暮四,处处牵挂,就是一个字儿:前端工程师!

201671010118 2016-2017-2《Java程序设计》 第十八周学习心得

已经是第十八周的java学习了,马上面临期末考试了,立马又要进行紧张的复习状态了,感觉也没有做好准备,打算在这周认真复习,好好备战期末考试,在这学期的java学习中,遇到了很多困难也解决了很多,重点的四五六章节内容感觉会有点遗忘,第十章十二章内容的掌握还可以,Swing用户界面组件掌握的不怎么好,在私下我想用更多的时间去努力学习这章内容,复习以前的内容. 这是最后一次的总结,一学期时间很快过去了,感谢代老师以及学长学姐的帮助,学习上一直在认真帮助我们,每周的作用业会认真的给我们批阅,特别感谢老师

杨玲 201771010133《面向对象程序设计(java)》第十八周学习总结

 <面向对象程序设计(java)>第十八周学习总结 第一部分:理论知识学习部分 第二部分:实验部分 实验名称:实验十八  总复习 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编

201771010108 -韩腊梅-第十八周学习总结

实验十八  总复习 1.实验目的与要求         (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 已完成 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1)  用户信息输入界面如下图所

达拉草201771010105《面向对象程序设计(java)》第十八周学习总结

实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1)  用户信息输入界面

201771010126 王燕《面向对象程序设计(java)》第十八周学习总结

实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: 1 package pro

201771010129 王颖奇《面向对象程序设计Java》第十八周实验总结

实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1) 用户信息输入界面如