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

蓝桥杯省赛真题C++B组2024-握手问题

一、题目

【问题描述】

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

二、思路

方法一:

        对于这种题,我一般是来找规律,我们从最简单的开始,有2个人的话,我们需要握手1次,3个人我们需要握手3次,四个人需要握手6次,5个人需要握手10次,6个人需要15次

人数握手次数
21
33=2+1
46=3+2+1
510=4+3+2+1
615=5+4+3+2+1

        我们不难找到一些规律,握手次数是  人数-1 开始向下逐个相加到1,3个人就是3-1向下开始相加(2+1)

        但是题中说7个人是不相互握手的,我们假设3个人不握手,看上面的表,3个人将不握手3次(2+1),7个人将不握手6+5+4+3+2+1=21次

        50个人握手49+48+47+...+2+1=1225次

        又7个人不握手,1225-7=1204次

方法二:(代码)

三、代码

#include<iostream>
using namespace std;
int main(){
//	总握手次数计算:如果没有任何限制,50人两两握手的次数为组合数C(50, 2)。
//排除7人之间的握手次数:这7人之间没有握手,因此需要从总次数中减去C(7, 2)。
	int  total = 50;
	int subtract = 7;
	int  total_hands = total * (total - 1)/2;
	int subtract_hands = subtract * (subtract - 1)/2;
	cout<< total_hands-subtract_hands << endl;
	return 0;
} 

四、反思

组合

  • 每次握手是 无序的(A 和 B 握手与 B 和 A 握手是同一件事)。

  • 组合数 C(n,2) 正是用来计算 无序且不重复的两两配对 的数量,

排列数 A(n, m) 与组合数 C(n, m) 的求法_排列组合-CSDN博客


http://www.kler.cn/a/581992.html

相关文章:

  • Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理
  • 【Axure资料】110套优质可视化大屏模板+图表组件+科技感元件等
  • 【Javascript网页设计】个人简历网页案例
  • git报错:error: RPC failed; curl 16 Error in the HTTP2 framing layer
  • stm32week6
  • 华为OD机试-抢7游戏(Java 2024 D卷 100分)
  • ⭐算法OJ⭐经典题目分类索引(持续更新)
  • Tomcat+Servlet运行后出现404错误解决方案
  • 【华为OD机考真题】- 星际篮球争霸赛(Java)
  • 蓝桥杯 商品库存管理
  • 《Android应用性能优化全解析:常见问题与解决方案》
  • llamafactory 微调教程
  • 如何在Django中实现批量覆盖更新的示例
  • Oracle数据库深度优化实战指南:从SQL到架构的全维度调优
  • 蓝桥杯 k倍区间
  • 《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》
  • 深度学习分词器char-level实战详解
  • BambuStudio学习笔记:MinAreaBoundigBox
  • AS_Path过滤器应用灵活配置示例
  • Nginx 缓存清理