握手问题 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

握手问题

题目来源

第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

原题链接

蓝桥杯 握手问题

问题描述

问题分析

算法思路分析:

  1. 问题描述

    • 总共有 50 人参加会议,每个人需要与其他 49 人握手一次。
    • 但有 7 个人彼此之间没有握手(这 7 人之间没有握手,但他们与其他 43 人握手)。
    • 需要计算实际发生的握手次数。
  2. 握手总数计算

    • 如果没有限制,50 人之间总的握手次数为组合数 C ( 50 , 2 ) = 50 × 49 2 = 1225 C(50, 2) = \frac{50 \times 49}{2} = 1225 C(50,2)=250×49=1225 。
    • 但由于 7 人之间没有握手,需要减去这 7 人之间本应发生的握手次数 C ( 7 , 2 ) = 7 × 6 2 = 21 C(7, 2) = \frac{7 \times 6}{2} = 21 C(7,2)=27×6=21。
  3. 代码实现

    • 代码通过累加 1 到 49 的和来计算 50 人之间的总握手次数(因为 1 + 2 + ⋯ + 49 = 49 × 50 2 = 1225 1 + 2 + \dots + 49 = \frac{49 \times 50}{2} = 1225 1+2+⋯+49=249×50=1225)。
    • 然后减去 1 到 6 的和(因为 1 + 2 + ⋯ + 6 = 6 × 7 2 = 21 1 + 2 + \dots + 6 = \frac{6 \times 7}{2} = 21 1+2+⋯+6=26×7=21),表示减去 7 人之间未发生的握手次数。
    • 最终结果为 1225 − 21 = 1204 1225 - 21 = 1204 1225−21=1204。

代码解释:

  1. 计算总握手次数

    • 使用循环 for (int i = 1; i < 50; i++) 累加 1 到 49 的和,得到 50 人之间的总握手次数 1225。
  2. 减去未发生的握手次数

    • 使用循环 for (int i = 1; i < 7; i++) 累加 1 到 6 的和,得到 7 人之间未发生的握手次数 21。
    • 从总握手次数中减去 21,得到实际握手次数 1204。
  3. 输出结果

    • 使用 printf("%d", res); 输出最终的握手次数。

总结:

通过累加和减去的方式,高效计算实际发生的握手次数。


完整代码

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int res = 0;  // 定义结果变量 res,用于存储握手总次数

    // 计算 50 人之间的总握手次数
    // 1 + 2 + 3 + ... + 49 = 1225
    for (int i = 1; i < 50; i++) {
        res += i;
    }

    // 减去 7 人之间未发生的握手次数
    // 1 + 2 + 3 + ... + 6 = 21
    for (int i = 1; i < 7; i++) {
        res -= i;
    }

    // 输出最终的握手次数
    printf("%d", res);

    return 0;
}
相关推荐
free-elcmacom3 小时前
C语言字符指针与字符串字面量——从一道“剑指 Offer”笔试题说起
c语言·visual studio
qq_199886873 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
汉克老师5 小时前
GESP2026年9月认证C++三级( 第三部分编程题(2、分割字符串))精讲
c++·gesp·小学生·学c++编程
估值探索者5 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
天若有情6735 小时前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
qq_199886875 小时前
第7板块·第3节:CUTLASS 的 GEMM 实现与优化策略
c++·人工智能·gpu算力·cuda
hetao17338375 小时前
2026-09-17 hetao1733837 的刷题记录
c++·算法
shada7 小时前
Boost.Process v2 在旧内核上报 `assign: Bad file descriptor`
c++
别动我齐刘海7 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
free-elcmacom8 小时前
C语言指针进阶——指针数组模拟二维数组,以及二级指针到底怎么理解
c语言·visual studio code