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;
}

【算法实验二】--【回溯法】--踩气球相关推荐

  1. 算法实验二 【踩气球】(回溯算法)

    算法实验二 [踩气球](回溯算法) 1142.踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了 ...

  2. educoder算法设计与分析 实验五回溯法

    实验五 回溯法 第1关:排列 第2关:子集合 第3关:TSP问题 第4关:n皇后问题 第5关:0-1背包 第1关:排列 题目描述: 1.设计算法从前m个大写字母(m≤26)种取出n个字母的所有排列(组 ...

  3. java背包算法回溯法_【算法分析】实验 4. 回溯法求解0-1背包等问题

    [TOC] 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设计.算法描述.算法正确性证明.算法分析.算法实现与测试),通过回溯法的在实际问题求解实践中,加深理解其基本原理和 ...

  4. 算法实验二 【八皇后问题】(回溯算法)

    算法实验二 [八皇后问题](回溯算法) 1007.8皇后问题 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 输出8皇后问题所有结果. 输入 没有输入. 输出 每个结果第一行是 ...

  5. 0x08算法设计与分析复习(二):算法设计策略-回溯法2

    参考书籍:算法设计与分析--C++语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等 ...

  6. 【算法分析】实验 4. 回溯法求解0-1背包等问题

    目录 实验内容 实验目的 实验结果 步骤1:描述与分析 步骤2:策略以及数据结构 步骤3 步骤4 步骤5 步骤6 实验总结 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设 ...

  7. c语言分治法求众数重数_算法实验二 分治法 众数问题.pdf

    算法实验二 分治法 众数问题 算法分析与设计实验二 分治法 主要内容 • 实验目的 • 主要实验仪器设备和环境 • 实验内容 • 实验要求 • 注意点 实验目的 • 理解分治法的基本思想 • 针对特定 ...

  8. 【NOJ1142】【算法实验二】踩气球

    1142.踩气球 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 六一儿童节,小朋友们做踩气球游戏,气球的编号是1-100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球的 ...

  9. 算法设计与分析 实验三 回溯法求解地图填色问题

    回溯法求解地图填色问题 一.实验目的与要求 1.实验基本要求: 2.实验亮点: 二.实验内容与方法 三.实验步骤与过程 1.未优化的回溯: (1)算法描述: (2)编程实现 (3)运行并测试: 2.对 ...

最新文章

  1. opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法
  2. vba 定义类_VBA|自定义类型、枚举类型和类模块及其使用
  3. JavaScript权威指南 - 函数
  4. assert()函数_【工程师分享】避免Xil_Assert系列宏导致的死循环
  5. java jre 中导入导出证书
  6. 燃鹅小助手自动抽奖源码
  7. xadmin与mysql数据库_django和xadmin打造后台管理系统(一)-xadmin安装及使用
  8. 跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析
  9. ICLR'22 | 审稿结果统计速览
  10. 数据结构---哈夫曼树的Java实现
  11. BootDo平台免密登陆
  12. ic启动器怎么导入模组_Model Y和Model 3的模组拆解对比
  13. 如何关闭H3C的交换机路由器等设备上使用SFP模块时候产生的警告提示
  14. 【cpu如何超频及cpu超频作用】
  15. C++实现七参数转换法(布尔莎模型)
  16. 4GDTU称重系统无线监测系统
  17. CIKM 2021 | 推荐系统相关论文分类整理
  18. 配置 PyCharm for Linux 设置启动图标 pycharm-edu-2021.3.1 Ubuntu 18.04.6 LTS
  19. mybatis中mapper.xml模板
  20. AI围棋学习之路一----棋盘和落子的类构建

热门文章

  1. Noah Mt4跟单系统制作第二篇 Mt4TradeApi连接服务器篇
  2. ubuntu 添加、删除用户,修改用户名称,修改主机名
  3. 入门文档级关系抽取_数据集DocRED、CDR、GDA
  4. 2023最新云喵兴趣社区圈子小程序源码+ThinkPHP内核开发
  5. 使用html css实现180箭头旋转,jQuery和css3控制箭头丝滑旋转
  6. route add 添加路由
  7. 依协变量(time-dependent covariables) 兼谈分层Cox回归 依时变量
  8. 调整的R方_如何选择回归模型
  9. 浏览器打印 之 window.print() 设置打印样式和内容
  10. 软件测试的生命周期、Bug