`
xitong
  • 浏览: 6401829 次
文章分类
社区版块
存档分类
最新评论

海盗比酒量--蓝桥杯

 
阅读更多

简述

这是2012年蓝桥杯全国软件大赛预赛的第三题,情景是海盗喝酒,问题是每瓶酒后未倒下的人数。

推荐链接:《2012蓝桥杯软件大赛预赛题目汇总》

题目描述

有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”

请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,...
例如,有一种可能是:20,5,4,2,0
答案写在“解答.txt”中,不要写在这里!

分析

这是一个可列举出所有可能的问题,可以使用通过循环嵌套实现的穷举法解决,本题的一个易错点就是分数的整数实现

源代码

# include <stdio.h>
# include <math.h>
int main(void){
	int person[5];  //还有多少人 
	double wine[5];
	wine[0] = 0.0;
	int tmpperson;
	
	for(person[0] = 4; person[0] <= 20; person[0]++){
		for(person[1] = 1; person[1] <= person[0] - 3; person[1]++){
			for(person[2] = 1; person[2] <= person[1] - 2; person[2]++){
				for(person[3] = 1; person[3] <= person[2] - 1; person[3]++){
					for(person[4] = 0; person[4] <= 0; person[4]++){
						wine[1] = 1.0 / person[0];
						wine[2] = 1.0 / person[1];
						wine[3] = 1.0 / person[2];
						wine[4] = 1.0 / person[3];
						tmpperson = person[0] * person[1] * person[2] * person[3];
						if(tmpperson / person[0] + tmpperson / person[1] + tmpperson / person[2] + tmpperson / person[3] == tmpperson){
							printf("%d %d %d %d %d\n", person[0], person[1], person[2], person[3], person[4]);
						}
					}
				}
			}
		}
	}
	printf("\nDone\n");
}

最后答案

12, 6, 4, 2, 0
15, 10, 3, 2, 0
18, 9, 3, 2, 0

分享到:
评论

相关推荐

    c语言比酒量

    这程序就是一个蓝桥杯竞赛的试题,挺有趣的,具体描述:有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... ...

    蓝桥杯-作业1-版本2.docx

    海盗们轮流喝酒,每轮酒量平分,直到第四瓶酒后所有人都倒下。问题是找出在场海盗的可能人数。程序通过循环遍历可能的人数组合,条件是所有人喝的酒量相加等于总酒量,并且每轮存活下来的人数必须递减。解答中使用了...

    第三届蓝桥杯

    3. 比酒量问题:这是一个逻辑推理题。海盗们轮流喝酒,每次喝完酒,有部分人会倒下。问题要求根据最后的情况推断最初有多少人以及每轮结束后剩下的人数。可以通过穷举所有可能的组合来解决,例如:12人开始,依次...

    蓝桥杯所有真题(2012-2015年)题目含答案.docx

    ##### 题目三:海盗酒量比拼 **背景介绍:** - **场景**:一群海盗(不超过20人)进行酒量比拼。 - **流程**:每次打开一瓶酒,所有人平分饮用,直到第四轮结束后全部倒下。 - **船长的记录**:只记得自己喝了一瓶...

    蓝桥杯真题解析

    "蓝桥杯真题解析" 在本节中,我们将对蓝桥杯真题进行解析,涵盖了多个领域的算法和技术。...本节我们讨论了蓝桥杯真题解析,涵盖了微生物增殖、海盗拼酒量、电视台计分规则和足球比赛等多个领域的算法和技术。

    2012“蓝桥杯”全国软件专业人才设计与创业大赛题目

    比酒量问题 一群海盗参加酒量比赛,比赛过程中不断有人倒下。 **问题描述:** - 每轮比赛后,剩余人数减少。 - 最终只剩下海盗船长一人。 - 目标:找出初始人数以及每轮后剩余人数。 **解析:** - 设初始人数为N...

    第三届蓝桥杯软件大赛C.doc

    问题描述:有一群海盗(不多于 20 人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第 4 瓶酒,坐着的已经所剩无几,...

    蓝桥杯软件大赛

    **问题描述**:一群不超过20人的海盗在船上比拼酒量,每开启一瓶酒,所有人平分饮用,直至第四轮结束。根据描述,要求找出所有可能的初始人数及其每轮结束后的剩余人数。 ##### 解题思路 1. **枚举法**:使用多重...

    第三届蓝桥杯全国软件设计大赛java本科组预赛试题

    - **游戏规则**:一群海盗(不多于20人)在船上比拼酒量,每次所有人平分喝下一瓶酒,有人会因此倒下。共进行了四轮,最后一轮所有人都倒下了。题目要求根据这些信息推断每一轮开始时有多少人以及每轮结束后剩下多少...

    第三届蓝桥杯全国软件设计大赛java本科组预赛试题.pdf

    海盗按照一定规则饮酒,每次酒量平分,直至所有人都倒下。题目要求根据最后一轮的存活人数推算初始人数以及每轮后的存活人数。解决这类问题通常需要反向推演,从最后的状态逐步回溯到初始状态。 3. 汉诺塔问题:...

Global site tag (gtag.js) - Google Analytics