PTA:猜数字-交互版

这篇具有很好参考价值的文章主要介绍了PTA:猜数字-交互版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你需要编写一个“猜数字”的程序。跟你做过的大部分题目不一样,你需要通过不断地询问另外一个程序(以下称之为“交互程序”)来猜到最终的数字。

在你的程序刚运行时,交互程序会通过标准输入给你提供一个数字 N,表示你需要猜的数字在 1 到 N 范围里。

接下来你可以开始发起你的询问。你可以直接通过输出到标准输出来询问;每次询问为一个数字,表示你猜测的结果。每次询问后,你需要刷新输出流,否则可能会有输出内容停留在缓冲区不被输出。例如 C++ 你可以使用 fflush(stdout),Java 你可以使用 System.out.flush() ,Pascal 你可以使用 flush(output) ,Python 则可以使用 stdout.flush()

交互程序会根据你的询问返回你的猜测与正确答案的比较情况。具体而言:

  • 如果正确答案小于你的猜测,则会返回 <
  • 如果正确答案大于等于你的猜测,则会返回 >=

一旦你确定你找到了正确的答案,则输出 ! x(x 是你猜测的数字,注意与感叹号用空格隔开),并立刻结束你的程序(否则判题系统可能不能返回正确的判题结果)。

最后,总的询问次数不能大于等于 25 次。

请你尝试猜对正确的数字吧!

输入样例:

20
>=
<
>=
<
>=
<

输出样例:

5
18
10
13
12
11
! 12

样例程序

以下程序用于你理解如何与交互程序进行交互,并不是正确的程序。

#include <cstdio>

int main() {
    int n;
    scanf("%d", &n);
    printf("%d\n", n / 2);
    fflush(stdout);
    char ans[10];
    scanf("%s", ans);
    if(ans[0] == '>') {
        printf("! %d\n", n / 2 + 1);
        fflush(stdout);
    } else {
        printf("! %d\n", n / 2 - 1);
        fflush(stdout);
    }
}

解题思路:

对面的程序首先确定了确定了一个值(程序心里想着。。。),然后告诉了我们一个最大数,确定值就在这之间,然后我们开始猜,对面程序会根据我们猜的数不断告诉我们是大于等于或者小了,最后我们能够确定就是这个数的时候,输出!+数。

但是这个过程,不管是对面的程序还是自己,都是我们自己写出来的。。。所以有点难以理解,不过慢慢想想就懂了。(假设自己分身???对面程序是分身,他心里想了一个数,本体来猜)

代码本身使用了类似于折半查找的思想,每次输入更新mid,min和max的值,不太难就没写注释,建议先跟着代码过程手写一波每一步的结果,一目了然。

AC代码如下:

#include <stdio.h>
int main()
{
    int mid,max,min=0;
    scanf("%d", &max);
    mid=(max+min)/2;
    printf("%d\n",mid);
    fflush(stdout);
    char ans[2];
    for(int i=0; i<25; i++)
    {
        scanf("%s", ans);
        if(ans[0] == '>'){
            min = mid;
            mid=(max+min)/2;
            if(mid == min){
                printf("! %d\n",mid);
                break;
            }
            else{
                printf("%d\n", mid);
            }

            fflush(stdout);
        }
        else{
            max = mid;
            mid=(max+min)/2;
            if(mid == max){
                printf("! %d\n",mid);
                break;
            }
            else{
                printf("%d\n", mid);
            }
            fflush(stdout);
        }
    }
    return 0;
}

测试:两个测试,一个12,一个18,为什么输入>是正确结果,而输入>=就错误了?蒙了,希望大佬评论解释一下,谢。

猜数字-交互版,算法猜数字-交互版,算法

 文章来源地址https://www.toymoban.com/news/detail-787263.html

 

到了这里,关于PTA:猜数字-交互版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • “数字人交互,与虚拟的自己互动”——用PaddleAvatar打造数字分身,探索人机交互的未来

    你是否曾经幻想过与自己的虚拟人交互?现在,使用 PaddleAvatar ,您可以将自己的图像、音频和视频转化为一个逼真的数字人视频,与其进行人机交互。 PaddleAvatar 是一种基于 PaddlePaddle 深度学习框架的数字人生成工具,基于Paddle的许多套件,它可以将您的数字图像、音频和视

    2024年02月15日
    浏览(31)
  • 数字孪生如何实现物理世界和数字世界之间的交互?

    在当今数字化时代,技术的飞速发展正在引领着各行各业的变革与创新。其中,数字孪生作为一项令人振奋的前沿技术,正在以惊人的方式实现着物理世界与数字世界的无缝交互。它不仅为企业带来了全新的商机,也为科学研究、生产制造等领域带来了巨大的推动力。 数字孪

    2024年02月13日
    浏览(33)
  • 7-1 猜数字-交互版

    你需要编写一个“猜数字”的程序。跟你做过的大部分题目不一样,你需要通过不断地询问另外一个程序(以下称之为“交互程序”)来猜到最终的数字。 在你的程序刚运行时,交互程序会通过标准输入给你提供一个数字 N,表示你需要猜的数字在 1 到 N 范围里。 接下来你可

    2024年02月07日
    浏览(65)
  • 【UE5】交互式展厅数字博物馆交互是开发实战课程

    长久以来,我们总是不断被初学者问到类似这样的问题:如何从头到尾做一个交互式程序开发项目?本套课程尝试对这个问题进行解答。 课程介绍视频如下 【UE5】数字展厅交互式开发全流程 【谁适合学习这门课】 本套课程面向初学者,满足学习需求包括但不仅限于以下:

    2024年01月18日
    浏览(39)
  • Axure9数字加减交互案例

    数字加减交互效果在Axure案例中很常用,在移动端最常见的形式就是购买商品时选择添加数量,下面就按照移动端购买商品时添加或减少来做案例。 这是实际案例                   首先我们要实现的交互效果是当点击“+”时,文本框内数字加1,当点击“-”号时文本框内数

    2024年02月02日
    浏览(32)
  • 数字孪生-> Uinty 3D 与Web 的数据交互 入门 demo

    Unity 3D 作为游戏开发引擎,凭借 高可用性,目前已经应用于数字孪生领域,而且可以方便的大包围 WEBGL 方便开发人员对孪生项目的二次开发。下边就简单介绍以下 Unity 3d 与 web 的双向交互是如何实现的; 需要准备 Unity 3d ,与vsCode 之类的代码编译软件 打开Unity 3d 新建一个工程

    2024年02月04日
    浏览(31)
  • 怪兽 AI 实时交互数字人直播软件系统,引领直播新潮流

    在当今数字化的时代,直播已经成为了一种极具影响力和吸引力的传播方式。无论是企业营销、教育培训还是娱乐互动,直播都发挥着重要的作用。而怪兽 AI 实时交互数字人直播软件系统的出现,更是为直播领域带来了全新的变革和机遇。 怪兽智能:https://www.guaishouai.com​​

    2024年04月16日
    浏览(34)
  • 【元宇宙欧米说】打造艺术与技术构建的交互式数字旅程

    Web3 to Earn项目如何扩大应用 功能和场景 ?在Web3时代怎么才能以更 新颖 、 有趣 的方式追赶潮流?各Web3领域项目及应用如何进行功能外延以 满足用户需求 ? 11月17日晚上九点,ZenCats项目管理员Fred将以“ 打造艺术与技术构建的交互式数字旅程 ”为题,与大家共同探讨艺术和

    2024年01月20日
    浏览(32)
  • Unity3d(webGL)构建数字孪生小案例(包含完整的数据交互体系)附赠完整代码

    B站视频演示 点击获取合视频对应的完整版代码 项目文档 数字孪生demo项目,打通了,模型-硬件终端-webGL-web端-服务端的数据交互,属于较为完整的项目练习。 包含文件:unity工程文件;webGL文件;前后端代码文件;硬件代码; 先来看看概念吧: 数字孪生体是现有或将有的物

    2024年02月09日
    浏览(30)
  • 从星巴克看:NFT不仅仅是一种数字资产,更代表着一种全新的交互模式

    品牌方不应将数字化的生意局限在NFT收藏品上,更需另辟蹊径,比如说粉丝通证。“粉丝通证与其说是一个概念,更准确的描述一种运营系统,而任何以此为基础进行的活动都是只是一种实现方式。如果发行的品牌方有强大影响力或者‘信心’,那么发售一款NFT收藏品是最简

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包