2024年蓝桥杯b组A题题目及详解思路

 1. 握手问题(结果填空)

【问题描述】

小蓝组织了一场算法交流会议,总共有 50人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但这 7 人与除这 7人以外的所有人进行了握手)。请问这些人之间一共进行了多少次握手?

注意 A 和 B 握手的同时也意味着 B 和 A 握手了,所以算作是一次握手。

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分_____.

【解析】

此题为一道比较简单的基础题,若不考虑后面七人,则此题变为50人间相互握手,很容易想到高中的排列组合,也就是50*49/ 2;及在50人里面选两人握手,因为相同两人互相握手算一次,所以需消序,如果加上限制条件,那就意味着可以想象成43人间相互握手,然后七人与43人间握手,

根据上述思路我们可以直接翻译题目写出简单的代码。

【答案描述】

#include<stdio.h>
int main()
{
	int ans;//ans 为握手的数
	ans = 0;
	for (int i = 1; i <= 43; i++)//此处为43人互相握手
	{
		for (int j = 1; j <= 43; j++)
		{
			if (i != j)//自己不能和自己握手
			{
				ans++;
			}
		}
	}
	ans = ans / 2;//互相握手算一次,除2;
	for (int i = 1; i <= 7; i++)
	{
		for (int j = 1; j <= 43; j++)
		{
			ans++;
		}
	}//根据循环第二次只用特殊七人与43人握手无需消序;
	printf("%d", ans);
}

计算出答案1204.

但需要注意的是第一次是43人间相互握手,需要消序,而第二个循环只是7人分别与另外43人握手,故没有“礼尚往来”,因此无需消序

【改进】

从高中的数学角度,我们对于第一题已经有了一个较好的理解,再此基础上,我们进一步用计算机的思维分析,50人中七人特殊,我们将50人排成一个序列,将7人放在最前列(或者最后列均可)

作为握手循环需遍历两次,即第一次遍历握手的人(i),第二次遍历被握手的人(j),则在i和j均小于7的时候,他们是不握手的,除此之外,当i=j时(人不会与自己握手),握手次数也不会增加,

则当出现上述情况时我们跳出此次循环进入下一次循环

因此在一个循环中我们可以将上述思路整合成以下代码

#include<stdio.h>
int main()
{
	int ans;
	ans = 0;
	for (int i = 1; i <= 50; i++)
	{
		for (int j = 1; j <= 50; j++)
		{
			if (i == j || (i <= 7 && j <= 7))
			{
				continue;
			}
			else {
				ans++;
			}
		}
	}
	ans = ans / 2;
	printf("%d", ans);
}

以上就是2024蓝桥杯的A题,后续题目思路关注动态,up会在两周内赶完的,还有A组!

新人求关注!!!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值