当前位置: 首页 > news >正文

蓝桥杯(握手问题)

小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。

但有 7个人,这 7 人彼此之间没有进行握手 (但这 7 人与除这 7 人以外的所有人进行了握手)。请问这些人之间一共进行了多少次握手?
注意 A 和 B 握手的同时也意味着 B 和 A 握手了,所以算作是一次握手。

拿到题,我们开始分析题目

开始分析:总共有 50 个人,每个人都要和除了自己以外的其他人握手,但是呢就是有7个劳弟互相不想握手,让我们算最后握了多少次手

思路一:我们先算50个人总共握了多少次手,然后减去7个人握手的次数,即就是答案

我们怎么算呢?话不多说上图!!

在这里插入图片描述
从图片中,我们可以看出来,总共50个人,第一个人和除了他自身之外的别人握手,总共握了49次(蓝色),第二个人握了48次(黄色)一直到最后一个人,最后一个人就不用主动去握手了,因为别人已经全和他握过手了。

那代码该怎么写呢?最简单的直接循环走起

在这里插入图片描述
这样我们就算出了50个人的握手总数,用相同的办法,我们可以算出7个人的握手总数,然后作差,就得到了我们最终的答案

在这里插入图片描述
完美结束,当然,有没有办法优化一下代码呢?

当然!!!还记得高中学过的等差数列求和吗?

Sn=(a1+an)n/2

利用这个公式,我们也可以得出结果,还省事了
在这里插入图片描述
OK,妥了,答案也是没错的

思路二:我们可以先不管这7个人,先算其他43个人的总握手次数,然后让剩下的7个人分别和这43个人握手就可以了

在这里插入图片描述
代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int total=0;//50个人握手的总数
	int s=0;//7个人握手的总数 
	for(int i=49;i>=1;i--)
	{
		total+=i; 
	}
	cout<<total<<'\n';
	for(int i=6;i>=1;i--)
	{
		s+=i;
	}
	cout<<s<<'\n';
	cout<<total-s<<'\n';
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
	cout<<(1+49)*49/2-(1+6)*6/2<<'\n';
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int sum=(1+42)*42/2;
	sum+=(43)*7;
	cout<<sum;
	return 0;
}

答案:1204
完结撒花!!

相关文章:

  • RabbitMQ——延迟消息的实现
  • M4 Mac mini运行DeepSeek-R1模型
  • Linux——计算机网络
  • SGLang部署大模型
  • 【系统稳定性】1.10 QNX Crash之Ramdump的分析(二)
  • 计算结构体的大小(结构体内存对齐)、结构体实现位段
  • 《MODEM HOST INTERFACE》,第二章:MHI接口架构
  • C++蓝桥杯基础篇(六)
  • 解锁 indexOf、substring 和 JSON.stringify:从小程序图片上传看字符串魔法 ✨
  • Flutter_学习记录_本地存储数据
  • 数据集笔记:新加坡traffic 照片
  • 虚拟化园区网络部署指南
  • 第十三届蓝桥杯大赛软件赛决赛C/C++ 大学 B 组
  • Linux下的网络通信编程
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(四级)真题 + 答案
  • 手撸大模型-基础篇 简单线性回归模型预测房价
  • 一周一个Unity小游戏2D反弹球游戏 - 球板的发球
  • 【03】STM32F407 HAL 库框架设计学习
  • 介绍微信小程序中页面的生命周期函数和组件的生命周期函数
  • Python:列表的定义和增删改查,推导式与嵌套
  • 建设门户网站/图片搜索识图入口
  • 美食网站建设的背景和目的/python培训
  • 邯郸专业做wap网站/全球疫情最新消息
  • 找别人做网站需要什么信息/网络营销培训
  • 大型车产品网站建设/网络营销的内容主要有哪些
  • 百度seo招聘/seo技巧