for循环暴力解法以及优化练习

embedded/2025/1/11 14:51:39/

这里主要是练习一下用等差数列解决for循环的时间复杂度的一些问题

公式:

        等差数列求和公式:(首+尾)*项数/2 
        等差数列项数公式:(尾-首)/公差+1

有一组数组比如:1,3,5,7,9,这组数的首项就是1,尾项就是9,项数就是5(根据等差数列项数公式,尾项是9,首项是1,因为每个数字之间差2,所以公差就是2,得出项数是5)

下面看几个简单的题目,练习一下

题目:2016.for循环求和

1.暴力解法

http://ybt.ssoier.cn:8088/problem_show.php?pid=2016

#include<iostream>
using namespace std;
int main()
{int n; cin >> n;int sum = 0;for (int i = 1; i <= n; i++){sum += i;}cout << sum;return 0;
}

时间复杂度O(n)

2.等差数列前n项求和公式

#include<iostream>
using namespace std;
int main()
{int n; cin >> n;cout << ((1 + n) * n) / 2;//((1+n))*n:1是首项,n是尾项,*n是项数((n-1)/1+1化简而来)return 0;
}

题目:1065.奇数求和

信息学奥赛一本通(C++版)在线评测系统

1.暴力解法

#include<iostream>
using namespace std;
int main()
{int m, n; cin >> m >> n;int sum = 0;for (int i = m; i <= n; i++){if (i % 2 == 1){sum += i;}}cout << sum;return 0;
}

时间复杂度:O(n-m+1)

2.优化解法

#include<iostream>
using namespace std;
int main()
{int m, n; cin >> m >> n;int sum = 0;if (m % 2 == 0)m++;//找到最小奇数for (int i = m; i <= n; i+=2)//从最小奇数开始循环{sum += i;}cout << sum;return 0;
}

思想:找到m~n范围内最小奇数(如果m不为奇数,m++后m就为最小奇数),然后从i为最小的奇数开始循环,每次迭代增加2(i+=2)时,i都是奇数。

3.等差数列前n项求和公式

#include<iostream>
using namespace std;
int main()
{int m, n; cin >> m >> n;if (m % 2 == 0)m++;//如果是偶数就m++变为范围内最小奇数if (n % 2 == 0)n--;//如果是偶数就m--变为范围内最大奇数cout << ((m + n) * ((n - m) / 2 + 1)) / 2;//(m+n):首项+尾项//((n - m) / 2 + 1)):项数return 0;
}

题目:2018.输出奇偶数之和

信息学奥赛一本通(C++版)在线评测系统

#include<iostream>
using namespace std;
int main()
{int n; cin >> n;//last:尾项int last = n, sum_odd = 0, sum_even = 0;if (n % 2 == 0)last = n - 1;//如果是偶数的话就n-1,尾项变为奇数。如果是奇数尾项不变还是nsum_odd = (1 + last)* ((n - 1) / 2 + 1) / 2;//等差数列求和公式if (n % 2 == 1)last = n - 1;//如果是奇数的话就n-1,尾项变为偶数。如果是偶数尾项不变还是nelse last = n;sum_even = (2 + last) * ((n - 2) / 2 + 1) / 2;//等差数列求和公式cout << sum_even << " " << sum_odd;return 0;
}

有很多题目可以用数学的公式来解答,大大减小了时间复杂度


http://www.ppmy.cn/embedded/153040.html

相关文章

通信网络安全分层及关键技术解决

要实现信息化&#xff0c;就必须重视信息网络安全。信息网络安全绝不仅是IT行业的问题&#xff0c;而是一个社会问题&#xff0c;是一个包括多学科的系统安全工程问题&#xff0c;并直接关系到国家安全。因此&#xff0c;知名安全专家沈昌祥院士呼吁&#xff0c;要像重视两弹一…

(超详细)Maven安装配置、以及在IDEA中创建Maven项目

一、登录官网下载Maven Download Apache Maven – Maven 根据自己所需要进行下载&#xff0c;如果是windows系统就下载zip文件&#xff0c;Linux系统就下载gz文件 我下载的版本是3.6.3&#xff0c;下面是网盘链接&#xff1a; 百度网盘链接: https://pan.baidu.com/s/1Ytoprb…

计算机网络之---端口与套接字

总括 端口&#xff1a;是计算机上用于标识网络服务的数字标识符&#xff0c;用于区分不同的服务或应用程序。套接字&#xff1a;是操作系统提供的用于进程间网络通信的编程接口&#xff0c;允许程序通过它来进行数据的发送、接收和连接管理。关系&#xff1a;端口号用于标识服…

基于 Nuxt3 + Obsidian 搭建个人博客

Nuxt是一个用Vue来编写的&#xff0c;可用来创建类型安全、高性能和生产级全栈 Web 应用程序和网站的全栈框架。后端是 Nitro&#xff0c;一个可以被单独使用的Web服务端框架。 作为一个全栈框架&#xff0c;不仅具备了比使用Vue开发SPA客户端更好的开发体验&#xff0c;还能享…

c++程序设计(第3版)系列教程

c程序设计(第3版)系列笔记 预备知识 在c当中&#xff0c;避免字符串被截断的输入为gets(S)&#xff0c;但是由于c语言新标准的推行和部分删除&#xff0c;在使用gets(S)时只能通过宏定义#define gets(S) fgets(S,sizeof(S),stdin)处理之后使用。 在c当中&#xff0c;面对难以处…

java1-相对路径与绝对路径

注意注意~开始新部分啦! 开始正式分享java前,先为大家分享一下一个常用的概念---文件的相对路径与绝对路径. 开篇明义: 相对路径是指一个文件或目录相对于当前工作目录的路径。相对路径不包含根目录&#xff0c;而是从当前目录开始计算。 绝对路径是指一个文件或目录从根目录…

Webpack 入门指南

Webpack 入门指南 引言 Webpack 是一个模块打包工具&#xff0c;它分析项目结构&#xff0c;从一个或多个入口起点开始递归构建依赖图。然后将这些模块和它们的依赖打包成少量的bundle文件&#xff0c;甚至是一个单独的文件。这使得我们能够更有效地管理和优化我们的前端资源…

AWS简介

AWS 一&#xff0c;AWS是什么&#xff1f; AWS的全称是 Amazon Web Services 的缩写&#xff0c;是亚马逊公司提供的一套广泛且应用广泛的云端服务。 AWS提供了超过200项全功能的服务&#xff0c;来自数据中心数据中心遍布全球多个地理位置&#xff0c;这些服务包括计算能力&…