【算法实验二】--【回溯法】--踩气球
1142.踩气球
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
六一儿童节,小朋友们做踩气球游戏,气球的编号是1~100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球的编号的乘积。现在需要你编一个程序来判断他们的胜负,判断的规则是这样的:如果两人都说了真话,数字大的人赢;如果两人都说了假话,数字大的人赢;如果报小数字的人说的是真话而报大数字的人说谎,则报小数字的人赢(注意:只要所报的小数字是有可能的,即认为此人说了真话)。
输入
输入为两个数字,0 0表示结束;
输出
输出为获胜的数字。
输入样例
36 62 49 343 0 0
输出样例
62 49
解析:这个题用回溯法做,先讲一下大概思路。由于每组判断比较两个数,可以把他们每一个都分别进行判断,那么balloon函数就只需要传过去两个参数n和k(刚开始是100)。然后判断这个n是不是满足条件。从k=100开始,如果n%k等于0的话就说明此处的k是其中一个气球,那么下一步就判断n/k和k-1了,然后balloon(n/k,k-1)即可;如果不等于0,就说明k不是其中一个气球,那么balloon(n,k-1)即可。直到n==1时就说明这个数是正确的,如果n还没有等于1但k已经等于1了,就说明这个数不正确。
这里需要说明两点:第一点时注意你的balloon函数不能在判断成立时直接return 1或者return 0,因为return只是返回上一层函数,而并不是结束整个的balloon函数使得到一个return值,所以这里只能用flag值记录输入两个数的真假在最后进行判断。第二点是我刚开始老是出错而且不知道什么原因,后来上网一查原来我的题目没说清楚。还有个附加条件是:只要所报的小数字是真的,即有可能为真。那么判断时需要设置一个是否用过的数组,而且要先判断小的。
代码如下:
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int n1,n2,arr[101];
int flag;
void balloon(int n,int k)
{
if(n==1)
{
flag=1;
return ;
}
if(k==1)
return ;
if(n%k==0&&arr[k]==0)
{
arr[k]=1;
balloon(n/k,k-1);
}
else
balloon(n,k-1);
return ;
}
int main()
{
while(scanf("%d%d",&n1,&n2)&&(n1||n2))
{
memset(arr,0,sizeof(arr));
int low,high;
if(n1>n2)
{
low=n2;
high=n1;
}
else
{
low=n1;
high=n2;
}
flag=0;
balloon(low,100);
int a=flag;
flag=0;
balloon(high,100);
int b=flag;
if((a==1&&b==1)||(a==0&&b==0))
{
cout<<high<<endl;
}
else if(a==0&&b==1)
cout<<high<<endl;
else
cout<<low<<endl;
}
return 0;
}
【算法实验二】--【回溯法】--踩气球相关推荐
- 算法实验二 【踩气球】(回溯算法)
算法实验二 [踩气球](回溯算法) 1142.踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了 ...
- educoder算法设计与分析 实验五回溯法
实验五 回溯法 第1关:排列 第2关:子集合 第3关:TSP问题 第4关:n皇后问题 第5关:0-1背包 第1关:排列 题目描述: 1.设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组 ...
- java背包算法回溯法_【算法分析】实验 4. 回溯法求解0-1背包等问题
[TOC] 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设计.算法描述.算法正确性证明.算法分析.算法实现与测试),通过回溯法的在实际问题求解实践中,加深理解其基本原理和 ...
- 算法实验二 【八皇后问题】(回溯算法)
算法实验二 [八皇后问题](回溯算法) 1007.8皇后问题 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 输出8皇后问题所有结果. 输入 没有输入. 输出 每个结果第一行是 ...
- 0x08算法设计与分析复习(二):算法设计策略-回溯法2
参考书籍:算法设计与分析--C++语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等 ...
- 【算法分析】实验 4. 回溯法求解0-1背包等问题
目录 实验内容 实验目的 实验结果 步骤1:描述与分析 步骤2:策略以及数据结构 步骤3 步骤4 步骤5 步骤6 实验总结 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设 ...
- c语言分治法求众数重数_算法实验二 分治法 众数问题.pdf
算法实验二 分治法 众数问题 算法分析与设计实验二 分治法 主要内容 • 实验目的 • 主要实验仪器设备和环境 • 实验内容 • 实验要求 • 注意点 实验目的 • 理解分治法的基本思想 • 针对特定 ...
- 【NOJ1142】【算法实验二】踩气球
1142.踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球的 ...
- 算法设计与分析 实验三 回溯法求解地图填色问题
回溯法求解地图填色问题 一.实验目的与要求 1.实验基本要求: 2.实验亮点: 二.实验内容与方法 三.实验步骤与过程 1.未优化的回溯: (1)算法描述: (2)编程实现 (3)运行并测试: 2.对 ...
最新文章
- opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法
- vba 定义类_VBA|自定义类型、枚举类型和类模块及其使用
- JavaScript权威指南 - 函数
- assert()函数_【工程师分享】避免Xil_Assert系列宏导致的死循环
- java jre 中导入导出证书
- 燃鹅小助手自动抽奖源码
- xadmin与mysql数据库_django和xadmin打造后台管理系统(一)-xadmin安装及使用
- 跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析
- ICLR'22 | 审稿结果统计速览
- 数据结构---哈夫曼树的Java实现
- BootDo平台免密登陆
- ic启动器怎么导入模组_Model Y和Model 3的模组拆解对比
- 如何关闭H3C的交换机路由器等设备上使用SFP模块时候产生的警告提示
- 【cpu如何超频及cpu超频作用】
- C++实现七参数转换法(布尔莎模型)
- 4GDTU称重系统无线监测系统
- CIKM 2021 | 推荐系统相关论文分类整理
- 配置 PyCharm for Linux 设置启动图标 pycharm-edu-2021.3.1 Ubuntu 18.04.6 LTS
- mybatis中mapper.xml模板
- AI围棋学习之路一----棋盘和落子的类构建
热门文章
- Noah Mt4跟单系统制作第二篇 Mt4TradeApi连接服务器篇
- ubuntu 添加、删除用户,修改用户名称,修改主机名
- 入门文档级关系抽取_数据集DocRED、CDR、GDA
- 2023最新云喵兴趣社区圈子小程序源码+ThinkPHP内核开发
- 使用html css实现180箭头旋转,jQuery和css3控制箭头丝滑旋转
- route add 添加路由
- 依协变量(time-dependent covariables) 兼谈分层Cox回归 依时变量
- 调整的R方_如何选择回归模型
- 浏览器打印 之 window.print() 设置打印样式和内容
- 软件测试的生命周期、Bug