蓝桥杯 (C++ 求和 等差数列 顺子日期 灌溉)

2023-11-02 07:36

本文主要是介绍蓝桥杯 (C++ 求和 等差数列 顺子日期 灌溉),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、求和

题目: 

思路:

代码:

2、等差数列 

题目:

思路:

 代码:

3、顺子日期

题目: 

思路: 

代码:

4、灌溉

题目:

代码: 



1、求和

题目: 

a10994d10cf944fca4587200a03f3181.png

思路:

1、首先想到的是两重遍历,累加和。但是当n取200000时,会超时,所以暴力的遍历没有办法通过全部案例。

2、将公式变形得到S=a1*(a2+....+an)+a2*(a3+....+an)+.....+an.

3、所以先求所有项的累加和sum,从第一项开始每次将sum减去一项自身ai乘以自身ai,再将这些和相加得到结果。

代码:

#include<iostream>
using namespace std;
int main()
{int n,a[200010];cin >> n;long long sum = 0;for (int i = 0; i < n; i++){cin >> a[i];sum += a[i];}long long ans = 0;for (int i = 0; i < n; i++){sum -= a[i];ans += a[i] * sum;}cout << ans;
}

2、等差数列 

题目:

b3af1879ea7f4b38bd1c176f42eda1b6.png

思路:

1、求等差数列,一开始想到直接找它们的最小差作为公差,但实际上是不行的,这可能没有办法构成等差数列。(比如:15、5、1这三个数,如果取5-1的差4为公差,会发现1、5、9、13、17,15不在等差数列中,所以不可取。)

2、通过上面的例子我们可以发现,我们要求的公差是可以满足一个数可以等于从另一个数加公差的倍数。所以我们要求的公差,是将所有数从小到大排序,所有相邻两数差的最大公约数。(比如:1、5、15,差有4、10,它们的最大公约数为2,所以公差为2,构成1、3、5、7、9、11、13、15的等差数列。)

3、最后得到公差,个数即位最大的数减去最小的数/公差+1;有一种情况比较特殊,当公差为0,即每个数都相等的时候,个数即为n。

 代码:

#include<iostream>
#include<algorithm>
using namespace std;
long long gcd(int a, int b)//辗转相除,求最大公约数
{if (b == 0)return a;elsereturn gcd(b, a % b);
}
int main()
{int n;cin >> n;long long a[100010];for (int i = 0; i < n; i++)cin >> a[i];sort(a, a + n);long long d = a[1] - a[0];for (int i = 2; i < n; i++){d = gcd(d, a[i] - a[i - 1]);}if (a[n - 1] == a[0])cout << n;elsecout << ((a[n - 1] - a[0]) / d )+ 1;
}

3、顺子日期

题目: 

aac965a693504de3b78531c344c1c22b.png

思路: 

1、判断每一天是否存在顺子序列:012、123、234.......,只要存在一个顺子序列即为顺子日期。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int judge(int t[])
{int flag = 0;for (int i = 3; i <= 5; i++){if (t[i] == (t[i + 1] - 1) && (t[i + 1] == t[i + 2] - 1)){flag = 1;break;}}return flag;
}
int main()
{int day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int t[8] = { 2,0,2,2 },ans = 0;for (int i = 1; i <= 12; i++){t[4] = i / 10;t[5] = i % 10;for (int j = 1; j <= day[i]; j++){t[6] = j / 10;t[7] = j % 10;if (judge(t)){ans++;//for (int i = 0; i < 8; i++)//cout << t[i];//cout << endl;}}}cout << ans;
}

4、灌溉

题目:

e79ac57a4b52496991e99d79a98a78ed.png

代码: 

#include<iostream>
#include<cmath>
using namespace std;
int n, m, t, r[110], c[110];
int main()
{cin >> n >> m >> t;for (int i = 1; i <= t; i++)cin >> r[i] >> c[i];int k;cin >> k;int cnt = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){for (int l = 1; l <= t; l++){int d = abs(r[l] - i) + abs(c[l] - j);if (d <= k){cnt++;break;}}}}cout << cnt << endl;
}

这篇关于蓝桥杯 (C++ 求和 等差数列 顺子日期 灌溉)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329098

相关文章

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

Mysql表如何按照日期字段的年月分区

《Mysql表如何按照日期字段的年月分区》:本文主要介绍Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、创键表时直接设置分区二、已有表分区1、分区的前置条件2、分区操作三、验证四、注意总结一、创键表时直接设置分区

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元