Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言实现搬山游戏,附上代码及解析

C语言实现搬山游戏,附上代码及解析

原创
作者头像
诸葛青云
修改于 2019-11-11 09:59:24
修改于 2019-11-11 09:59:24
86902
代码可运行
举报
运行总次数:2
代码可运行

问题描述

设有n座山,计算机与人作为比赛的双方,轮流搬山。规定每次搬山数不能超过k座,谁搬最后一座淮输。游戏开始时,计算机请人输入山的总数n和每次允许搬山的最大数k,然后请人开始,等人输入了需要搬走的山的数目后,计算机马上打印出它搬多少座山,并提示尚余多少座山。双方轮流搬山直到最后一座山搬完为止。计算机会显示谁是赢家,并问人是否要继续比赛。如果人不想玩了,计算机便会统计出共玩了几局,双方胜负如何。

问题分析

程序中先输入山的座数,要求每次搬山的最大数,从而找出最佳的搬山座数以获得游戏的胜利。

程序在若干次游戏结束后还记录了电脑跟人的胜负次数。程序中应用了条件语句、循环语句和逻辑判断语句来实现功能。

在有n座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k,应搬山的数目要满足关系:(n-1)%(k+1)。

算法设计

计算机参加游戏时应遵循下列原则:

(1) 当剩余山的数目-1≤可移动的最大数k时,计算机要移(剩余山数目-1)座,以便将最后一座山留给人。

(2) 对于任意正整数x,y,一定有:

0≤x%(y+1)≤y

在有n座山的情况下,计算机为了将最后一座山留给人,而且又要控制每次搬山的数目不超过最大数k,则它应搬山的数目要满足下列关系:

(n-1)%(k+1)

如果算出结果为0,即整除无余数,则规定只搬一座山,以防止冒进后发生问题。

#include

int main()

{

int n, k, x, y, cc, pc, g;

printf("搬山游戏\n");

printf("游戏开始\n");

pc=cc=0;

g=1;

for( ; ; )

{

printf("No.%2d game \n", g++);

printf("-------------\n");

printf("那里有多少座山?");

scanf("%d", &n); /*读入山的总数*/

if(!n)

break;

printf("每次允许多少座山?");

do

{

scanf("%d", &k); /*读入允许的搬山数*/

if(k>n || k<1) /*判断搬山数*/

printf("再说一遍!\n");

}

while(k>n || k<1);

do

{

printf("你希望多少山搬走?");

scanf("%d",&x);

if(x<1 || x>k || x>n) /*判断搬山数是否符合要求*/

{

printf("不符合要求,请再次输入!\n");

continue;

}

n-=x;

printf("现在还剩下%d座山.\n", n);

if(!n)

{

printf("……………我赢了,你输了。……………\n\n");

cc++;

}

else

{

y=(n-1)%(k+1); /*求出最佳搬山数*/

if(!y)

y=1;

n-=y;

printf("电脑一走了 %d 座山.\n", y);

if(n)

printf(" 现在还剩下%d座山.\n", n);

else

{

printf("……………我输了,你赢了。………………\n\n");

pc++;

}

}

}

while(n);

}

/*打印结果*/

printf("总共进行了游戏%d.\n", cc+pc);

printf("你的得分是胜利%d,输了%d.\n", pc, cc);

printf("我的得分是胜利%d,输了%d.\n", cc, pc);

return 0;

}

小编给大家推荐一个学习氛围超好的地方,鼠标放到头像上就能看到

结果如下:

搬山游戏

游戏开始

No. 1 game

-------------

那里有多少座山?10

每次允许多少座山?3

你希望多少山搬走?1

现在还剩下9座山.

电脑一走了 1 座山.

现在还剩下8座山.

你希望多少山搬走?3

现在还剩下5座山.

电脑一走了 1 座山.

现在还剩下4座山.

你希望多少山搬走?2

现在还剩下2座山.

电脑一走了 1 座山.

现在还剩下1座山.

你希望多少山搬走?1

现在还剩下0座山.

……………我赢了,你输了。……………

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hive_
HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树
挽风
2023/10/17
3580
Hive_
hive基础总结(面试常用)
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 Metastore (hive元数据) Hive将元数据存储在数据库中,比如mysql ,derby.Hive中的元数据包括表的名称,表的列和分区及其属性,表的数据所在的目录 Hive数据存储在HDFS,大部分的查询、计算由mapreduce完成 Hive数据仓库于数据库的异同 (1)由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言, 再无类似之处。 (2)数据存储位置。 hdfs raw local fs (3)数据格式。 分隔符 (4)数据更新。hive读多写少。Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。 INSERT INTO … VALUES添加数据,使用UPDATE … SET修改数据 不支持的 HDFS 一次写入多次读取 (5) 执行。hive通过MapReduce来实现的 而数据库通常有自己的执行引擎。 (6)执行延迟。由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架 (7)可扩展性 (8)数据规模。 hive几种基本表类型:内部表、外部表、分区表、桶表 内部表(管理表)和外部表的区别: 创建表 外部表创建表的时候,不会移动数到数据仓库目录中(/user/hive/warehouse),只会记录表数据存放的路径 内部表会把数据复制或剪切到表的目录下 删除表 外部表在删除表的时候只会删除表的元数据信息不会删除表数据 内部表删除时会将元数据信息和表数据同时删除 表类型一、管理表或内部表Table Type: MANAGED_TABLE
用户1217611
2019/05/25
8530
想成为大数据分析工程师?那这份面试集锦一定要收好!
本篇文章为大家带来Hive面试指南,文内会有两种题型,问答题和代码题,题目一部分来自于网上,一部分来自平时工作的总结。
AI研习社
2019/08/23
1.1K0
想成为大数据分析工程师?那这份面试集锦一定要收好!
大数据面试杀招——Hive高频考点,就怕你都会!
上一篇文章介绍了3道常见的SQL笔试题,反响还算是不错。于是乎,接下来的几天,菌哥将每天为大家分享一些关于大数据面试的杀招,祝小伙伴们都能早日找到合适的工作~
大数据梦想家
2021/01/27
2.2K0
大数据面试杀招——Hive高频考点,就怕你都会!
Hive 高频面试题 30 题
来源:大数据技术与架构本文约6000字,建议阅读10分钟本文收集了Hive面试中的高频考题。 如果你是数据开发、数据研发、或数据分析师,那么这篇文章将对你非常有用。记得转发收藏哦。 一、Hive面试题 1、hive内部表和外部表的区别 未被external修饰的是内部表,被external修饰的为外部表。 区别: 内部表数据由Hive自身管理,外部表数据由HDFS管理; 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),
数据派THU
2022/04/06
1.9K0
Hive 高频面试题 30 题
达观数据文辉:Hadoop和Hive使用经验
近十年来,随着Hadoop生态系统的不断完善,Hadoop早已成为大数据事实上的行业标准之一。面对当今互联网产生的巨大的TB甚至PB级原始数据,利用基于Hadoop的数据仓库解决方案Hive早已是Ha
达观数据
2018/03/30
1.5K0
基于MapReduce的Hive数据倾斜场景以及调优方案
通常认为当所有的map task全部完成,并且99%的reduce task完成,只剩下一个或者少数几个reduce task一直在执行,这种情况下一般都是发生了数据倾斜。
火之高兴
2024/07/25
3610
(七)Hive总结
Hive 和数据库除了拥有类似的查询语言,再无类似之处。 1)数据存储位置 Hive 存储在 HDFS 。数据库将数据保存在块设备或者本地文件系统中。 2)数据更新 Hive中不建议对数据的改写。而数据库中的数据通常是需要经常进行修改的, 3)执行延迟 Hive 执行延迟较高。数据库的执行延迟较低。当然,这个是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。 4)数据规模 Hive支持很大规模的数据计算;数据库可以支持的数据规模较小。
wolf
2020/09/20
1.4K0
【数据库设计和SQL基础语法】--查询数据--聚合函数
聚合函数是一类在数据库中用于对多个行进行计算并返回单个结果的函数。它们能够对数据进行汇总、统计和计算,常用于提取有关数据集的摘要信息。聚合函数在 SQL 查询中广泛应用,包括统计总数、平均值、最大值、最小值等。
喵叔
2023/12/18
1.2K0
看完了108份面试题,我为你总结出了这 10 个【Hive】高频考点(建议收藏)
之前听 CSDN 头牌博主 @沉默王二 说过一句话,我觉得十分在理:处在互联网时代,是一种幸福,因为各式各样的信息非常容易触达,如果掌握了信息筛选的能力,就真的是“运筹帷幄之中,决胜千里之外”。就像现在各行业都内卷不断,我们要从中破圈,只有想办法提升自己的竞争力!例如备战面试,广泛无脑地刷题只会消耗完你最后一丝精力,而多刷别人总结复盘记录下来的面经,有利于我们为下一次的“跨越”做好准备!
用户8612862
2021/05/13
1K0
看完了108份面试题,我为你总结出了这 10 个【Hive】高频考点(建议收藏)
Hive面试题持续更新【2023-07-07】
Hive是一个在Hadoop上构建的数据仓库基础架构,它提供了一种类似于SQL的查询语言,称为HiveQL,用于处理和分析大规模的结构化数据。Hive的体系架构主要包括以下几个组件:
火之高兴
2024/07/25
2050
【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收
group by和聚合函数(sum count max min)一起使用 group by和以上的聚合函数一起使用的时候会默认在map端执行一次combiner(局部聚合:减少reducetask的数据量,这个时候reduce端接受的数据就会大大减少 一般不会出现数据倾斜 select id,count(*) from course group by id;
从大数据到人工智能
2022/09/16
1.8K0
【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收
Hive个人笔记总结
①保证环境变量中有JAVA_HOME ②基于HADOOP工作,保证环境变量中有HADOOP_HOME ③在环境变量中配置HIVE_HOME,默认hive在启动时,会读取HIVE_HOME/conf中的配置文件
Java架构师必看
2021/05/14
2.7K0
Hive参数调优
  大多数的Hadoop Job是需要Hadoop提供的完整的可扩展性来处理大数据集的。不过,有时Hive的输入数据量是非常小的。在这种情况下,为查询触发执行任务时消耗可能会比实际job的执行时间要多的多。对于大多数这种情况,Hive可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短。
挽风
2021/04/13
1.6K0
Hive参数调优
五万字 | Hive知识体系保姆级教程
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
数据社
2021/08/27
2.2K0
五万字 | Hive知识体系保姆级教程
硬刚Hive | 4万字基础调优面试小总结
Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理、特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,可通过HQL语句实现简单的MR统计,Hive将HQL语句转换成MR任务进行执行。
王知无-import_bigdata
2021/06/01
2.1K0
硬刚Hive | 4万字基础调优面试小总结
Hive 高频考点讲解
Hive 是 FaceBook 开源的一款基于 Hadoop 数据仓库工具,它可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
sowhat1412
2022/09/20
1.2K0
Hive 高频考点讲解
精选Hive高频面试题11道,附答案详细解析(好文收藏)
Hive支持索引(3.0版本之前),但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。并且Hive索引提供的功能很有限,效率也并不高,因此Hive索引很少使用。
五分钟学大数据
2021/05/27
1.2K0
3万字史诗级 Hive 性能调优(建议收藏)
Hive 作为大数据领域常用的数据仓库组件,在平时设计和查询的时候要特别注意效率 。影响 Hive 效率的几乎从不是数据量过大,而是数据倾斜、数据冗余、Job或I/O过多、MapReduce 分配不合理等等。 对Hive 的调优既包含 Hive 的建表设计方面,对 HiveHQL 语句本身的优化,也包含 Hive 配置参数 和 底层引擎 MapReduce 方面的调整 。
肉眼品世界
2022/06/15
5K0
3万字史诗级 Hive 性能调优(建议收藏)
最新Hive/Hadoop高频面试点小集合
如果其中有一张表为小表,直接使用map端join的方式(map端加载小表)进行聚合。
王知无-import_bigdata
2021/04/21
1.1K0
最新Hive/Hadoop高频面试点小集合
相关推荐
Hive_
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验