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

P6352 [COCI 2007/2008 #3] CETIRI

记录22

#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {if (b == 0)  return a;return gcd(b, a % b);
}
int main(){int a[10]={};for(int i=1;i<=3;i++) cin>>a[i];sort(a+1,a+4);int t=gcd(a[2]-a[1],a[3]-a[1]); for(int i=1;i<=4;i++){int x=a[1]+(i-1)*t;if(a[i]!=x){cout<<x;break;} } return 0;
}

突破点

你原本有 4 个数,它们从小到大排序后构成了等差数列。

但是现在丢失了一个数,并且其余的三个数的顺序也被打乱了。

思路

等差数列公式  an=a1+(n-1)*d

因为是SPJ,所以默认最小的是第一项a1,然后求出来d就行了

用gcd来求d,关于gcd的详细介绍,放在文章的补充部分

代码简析

int gcd(int a, int b) {if (b == 0)  return a;return gcd(b, a % b);
}

gcd求最大公约数,即求等差数列公式  an=a1+(n-1)*d 中的d

    sort(a+1,a+4);int t=gcd(a[2]-a[1],a[3]-a[1]); 

sort从小到大排序,a+1到a+4是数组的a[1],a[2],a[3]

然后t存储的就是等差数列公式中的d

	for(int i=1;i<=4;i++){int x=a[1]+(i-1)*t;if(a[i]!=x){cout<<x;break;} } 

知道a1,知道d,所以依次比对四项,然后输出缺少的那一项

x是其正常排列入的顺序

补充

最大公约数(GCD)详解

1. 最大公约数(GCD)概述

  • 定义:最大公约数(Greatest Common Divisor,GCD)是指两个或多个整数共有约数中最大的一个。

  • 应用:最大公约数在数学和计算机科学中有着广泛的应用,例如简化分数、解决同余方程等。

2. 欧几里得算法

  • 定义:欧几里得算法(Euclidean Algorithm)是一种高效的计算两个整数最大公约数的方法。

  • 原理:基于以下性质:

    • 两个整数 a 和 b(假设 a>b)的最大公约数等于 b 和 amodb 的最大公约数。

    • 当 b 为 0 时,最大公约数为 a。

3. 代码实现

3.1 代码

int gcd(int a, int b) {if (b == 0)  return a;return gcd(b, a % b);
}
3.2 代码解释
  1. 函数定义

    • int gcd(int a, int b):定义了一个名为 gcd 的函数,接受两个整数参数 a 和 b。

  2. 基本情况

    • if (b == 0) return a;:如果 b 为 0,返回 a。

      • 解释:当 b 为 0 时,根据欧几里得算法的原理,a 就是最大公约数。

  3. 递归调用

    • return gcd(b, a % b);:如果 b 不为 0,递归调用 gcd 函数,参数为 b 和 amodb。

      • 解释:根据欧几里得算法的原理,两个整数 a 和 b 的最大公约数等于 b 和 amodb 的最大公约数。

4. 示例分析

4.1 示例1:计算 GCD(48,18)
  1. 初始调用

    • gcd(48, 18)

      • b 不为 0,递归调用 gcd(18, 48 % 18)

      • 48mod18=12,所以调用 gcd(18, 12)

  2. 第一次递归

    • gcd(18, 12)

      • b 不为 0,递归调用 gcd(12, 18 % 12)

      • 18mod12=6,所以调用 gcd(12, 6)

  3. 第二次递归

    • gcd(12, 6)

      • b 不为 0,递归调用 gcd(6, 12 % 6)

      • 12mod6=0,所以调用 gcd(6, 0)

  4. 基本情况

    • gcd(6, 0)

      • b 为 0,返回 a,即 6。

最终,GCD(48,18)=6。

4.2 示例2:计算 GCD(6,9)
  1. 初始调用

    • gcd(6, 9)

      • b 不为 0,递归调用 gcd(9, 6 % 9)

      • 6mod9=6,所以调用 gcd(9, 6)

  2. 第一次递归

    • gcd(9, 6)

      • b 不为 0,递归调用 gcd(6, 9 % 6)

      • 9mod6=3,所以调用 gcd(6, 3)

  3. 第二次递归

    • gcd(6, 3)

      • b 不为 0,递归调用 gcd(3, 6 % 3)

      • 6mod3=0,所以调用 gcd(3, 0)

  4. 基本情况

    • gcd(3, 0)

      • b 为 0,返回 a,即 3。

最终,GCD(6,9)=3。

5. 代码完整示例

以下是一个完整的C++程序,展示如何使用 gcd 函数计算两个整数的最大公约数:

#include <iostream>
using namespace std;// 定义gcd函数
int gcd(int a, int b) {if (b == 0)  return a;return gcd(b, a % b);
}int main() {int num1, num2;// 输入两个整数cout << "请输入两个整数:";cin >> num1 >> num2;// 调用gcd函数并输出结果cout << "最大公约数是:" << gcd(num1, num2) << endl;return 0;
}

6. 总结

  • 最大公约数(GCD):两个或多个整数共有约数中最大的一个。

  • 欧几里得算法:一种高效的计算最大公约数的方法,基于递归调用和模运算。

  • 代码实现

    • 基本情况:当 b 为 0 时,返回 a。

    • 递归调用:当 b 不为 0 时,递归调用 gcd(b, a % b)

通过上述步骤,可以清晰地理解最大公约数的计算过程,并使用欧几里得算法高效地实现这一计算。


文章转载自:

http://QwO93PXE.tkLqs.cn
http://Lj9UPk84.tkLqs.cn
http://hXScfgt9.tkLqs.cn
http://9E213srp.tkLqs.cn
http://l1IN0Xmo.tkLqs.cn
http://dGL9lQgy.tkLqs.cn
http://ytQgFrll.tkLqs.cn
http://wPBkAB0U.tkLqs.cn
http://q2lpzApw.tkLqs.cn
http://V6YQNsHw.tkLqs.cn
http://FZMzpl2w.tkLqs.cn
http://NJ2xB2Y8.tkLqs.cn
http://reSzaQst.tkLqs.cn
http://0dhAfFAM.tkLqs.cn
http://l8tAKPR7.tkLqs.cn
http://gVDVWnll.tkLqs.cn
http://o9Xo7QOk.tkLqs.cn
http://28Ud4mU8.tkLqs.cn
http://OnvNBqIP.tkLqs.cn
http://FMTOhaKB.tkLqs.cn
http://09JsyxkM.tkLqs.cn
http://1nAPvfCx.tkLqs.cn
http://TD5EEhER.tkLqs.cn
http://fK7HJ2UV.tkLqs.cn
http://iZIZm0DU.tkLqs.cn
http://LcGNUYyb.tkLqs.cn
http://S14njIdp.tkLqs.cn
http://le3w0kMJ.tkLqs.cn
http://p9WOoGLC.tkLqs.cn
http://VrHxFQxr.tkLqs.cn
http://www.dtcms.com/a/385518.html

相关文章:

  • 【LeetCode 每日一题】37. 解数独
  • 多项式回归:线性回归的扩展
  • AI生成到无缝PBR材质:Firefly+第三方AI+Substance工作流
  • Java分布式锁实战指南:从理论到实践
  • 【CSS】层叠上下文和z-index
  • inline-block元素错位原因及解决方法
  • 【Java】P3 Java基础:关键字、标识符与变量详解
  • Golang语言入门篇003_Go源代码结构
  • 【Docker】报错Data page checksums are disabled.
  • Viper:Go语言中强大的配置管理库入门教程
  • ISO/PAS 5112 附录A 与21434 WPs的映射关系
  • 机器学习-Bagging
  • OpenCV 图像拼接实战:从特征检测到全景融合
  • Atlas-Chain:一个灵活的Java责任链框架设计与实现
  • FBX/OBJ/MAX/GLB/GLTF怎么处理成3dtiles,制作B3DM格式模型文件
  • 金融数据---获取问财数据
  • Python(1)|| 超基础语法(格式,输入输出,变量,字符串,运算符)
  • Linux 文本处理三剑客:grep、sed 与 awk
  • docker-webtop+cpolar:无感远程Linux桌面方案
  • 随机森林模型:基于天气数据集的分类任务全流程解析
  • Linux vim快捷键记录
  • 聊聊大模型的self-training:从Test-time RL说起
  • 星穹无损合约:以信任为基石,开启DeFi新纪元
  • cJSON的安装和使用
  • godot+c#实现玩家的简单移动
  • 【工具】多线程任务执行函数
  • 使用 Spring Boot 搭建和部署 Kafka 消息队列系统
  • scikit-learn pipeline做数据预处理 模板参考
  • MATLAB的二维SIMPLE算法实现方腔自然对流
  • SPMI总线协议(二)