蓝桥到此一游—2012年C/C++ B组蓝桥杯省赛真题(一)

本文详细解析了2012年蓝桥杯省赛C/C++组的部分真题,涵盖了微生物增殖、古堡算式、比酒量等十道题目,每道题目包括问题描述、解题思路和代码示例,展示了编程解决问题的方法和策略。
摘要由CSDN通过智能技术生成

目录

一,微生物增殖

二,古堡算式

三、比酒量

四,奇怪的比赛

 五,方阵转置

六,大数乘法

七,放棋子

八,密码发生器

九,夺冠概率

十,取球游戏



一,微生物增殖

题目

假设有两种微生物X和Y,X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。一个新出生的X,半分钟之后吃掉1个Y,且从此开始每隔1分钟吃掉1个Y。已知新出生的X=10,Y=89,求60分钟后Y的数目。若X=10,Y=90呢?
本题的要求就是写出这两种初始条件下,60分钟后Y的数目。题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只Y就是最终导致Y种群灭绝的最后一根稻草!

思路

因为半分钟不好处理,所以我们可以把时间整体上都乘2,那么就相当于每2分钟Y被吃掉X个,每6分钟X数目加倍,每4分钟Y数目加倍,还有一点就是当Y减少到小于等于0时就被吃完了。

代码块

#include <stdio.h>
int main()
{
	int i,x=10,y=90;
	for(i=1;i<=120;i++)
	{
		if(y<=0)
		{
			y=0;
			break;
		}
		if(i%2==1)
			y-=x;
		if(i%4==0)
			y*=2;
		if(i%6==0)
			x*=2;
	}
	printf("%d\n",y);
	return 0;
}

答案

94371840

 这个只是89的答案。

二,古堡算式

题目

福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE*?=EDCBA。他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!”,于是,两人沉默了好久,还是没有算出合适的结果来。 请你利用计算机的优势,找到破解的答案,把ABCDE所代表的数字写出来。

思路

运用这个全排列函数next_permutation,简单说一下这个全排列函数用法。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[3];
	a[0] = 1; a[1] = 2;a[2] = 3;
	while (next_permutation(a, a + 3))
	{
		cout << a[0] << a[1] << a[2] << endl;
	}
}

答案是

132
213
231
312
321。注意还有一个是本身的排列

代码块

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[10] = {0,1,2,3,4,5,6,7,8,9};
	while(next_permutation(a,a+10))    
	{  
		{
			int leftVal = a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
			int rightVal = a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];
			int temp = a[5];
			if(leftVal*temp==rightVal)
			{
				cout << a[0] << a[1] << a[2] << a[3] << a[4] <<endl;
			
				break;
			}
		}
	}
	return 0;
}

答案

21978

三、比酒量

题目

有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复----直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“…昨天,我正好喝了一瓶…奉劝大家,开船不喝酒,喝酒别开船…”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。如果有多个可能的答案

思路

这个题目主要重点是船长喝了一瓶,然后所有人总共喝了四轮,运用四轮for循环。

代码块

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	for(int a = 4; a <= 20; a++)
	{
		for(int b = 3; b < a; b++)
		{
			for(int c =2; c < b; c++)
			{
				for(int d = 1; d < c; d++)
				{
					if((1.0/a+1.0/b+1.0/c+1.0/d)==1)
					{
						cout << a << " " << b << " " <<c << " " << d <<endl;
					}
				}
			}
		}
	}
}

答案

12 6 4 2
15 10 3 2
18 9 3 2
20 5 4 2

四,奇怪的比赛

题目

某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手的起步分都是10分,某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1,答错的记为0,则10个题目

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值