握手问题(蓝桥杯)

文章目录

握手问题

【问题描述】

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

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

【答案提交】

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

答案:1204

解题思路

这题稍微模拟一下就好了,比如我设7个人相互握手,其中只有3个人没有相互握手

由题意得:这3 人彼此之间没有进行握手(但这 3 人与除这 3 人以外的所有人进行了握手,所以在图中将最后三人的握手次数剪掉即可

由上图得到:最终答案为18

由此可以得到代码:

cpp 复制代码
	int ans=0;
	for(int i=1;i<=7-3;i++)
		for(int j=i+1;j<=7;j++)
			ans++;
	cout<<ans;

模拟

cpp 复制代码
// 引入C++标准库,这通常包含了常用的数据结构和算法。
#include<bits/stdc++.h>
using namespace std;

// 主函数入口
int main()
{
    // 定义并初始化答案变量为0,用来存储握手的总次数
    int ans=0;
    
    // 外层循环遍历除了7个不与彼此握手的人之外的其他所有人
    // 这里由于有50个人,7个人彼此之间不握手,所以是从1循环到43
    for(int i=1;i<=50-7;i++)
        // 内层循环遍历当前人(i)之后的所有人(包含7个不与彼此握手的人)
        // 每对不同的人之间只会计算一次握手,因为握手是双向的
        for(int j=i+1;j<=50;j++)
            ans++; // 每发现一对有效的握手,答案增加1
    
    // 打印出计算得到的握手次数
    cout<<ans;
    
    // 程序正常结束
    return 0;
}
相关推荐
码匠许师傅8 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
夜不会漫长12 小时前
C++入门(1)
开发语言·c++·算法
旖旎夜光14 小时前
LeetCode 852:山脉数组的峰顶索引(二分查找) —— 题解
数据结构·c++·算法·leetcode·二分查找
..Dauntless..14 小时前
【C++】继承——基类和派生类的配合
开发语言·c++·算法
程与留14 小时前
05_Qt 核心模块概览——Qt Core、Gui、Widgets、Quick 的职责划分
c++·qt
buhuizhiyuci15 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
冻柠檬飞冰走茶18 小时前
《数据结构实验指导-C++语言版》 求单链表list中的元素个数,即表长
开发语言·数据结构·c++·算法·list
_Narcissus_18 小时前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
法哥201219 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++
_Narcissus_20 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举