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

蓝桥杯省赛真题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博客

相关文章:

  • git安装,配置SSH公钥(查看版本、安装路径,更新版本)git常用指令
  • 大模型架构记录4-文档切分 (chunks构建)
  • Linux mount与umount以及机器重启后自动mount
  • 登录校验会话技术JWT
  • Linux练级宝典->Linux环境变量 ,main函数参数的意义
  • Jenkins持续集成与Web前端、SpringBoot项目的部署
  • LINUX系统安装+添加共享目录
  • Docker 安装成功后,安装 Dify 中文版本的步骤
  • 侯捷C++系列课程学习笔记
  • Matlab中快速查找元素索引号
  • 红警95游戏秘籍
  • axure11安装教程包含下载、安装、汉化、授权(附安装包)图文详细教程
  • 图像识别技术与应用总结
  • UI自动化:Python + Selenium4.6+版本 环境搭建
  • linux学习(十三)(shell编程(文字,变量,循环,条件,调试))
  • 【git】 贮藏 stash
  • 三、Docker 集群管理与应用
  • SmartDeblur深度解析:全能型图片编辑器,老照片修复利器
  • 快速使用Python爬虫根据关键词获取衣联网商品列表:实战指南
  • C++ 基础2
  • 网站建设职业怎么样/南宁百度关键词优化
  • 新疆生产建设兵团教育局官方网站/目前搜索引擎排名
  • 接做网站简介/郑州网络推广厂家
  • 餐饮加盟手机网站建设/个人接app推广单去哪里接
  • 网站怎么做微信支付/搜索引擎优化举例说明
  • wordpress插件分类/谷歌seo搜索引擎下载