c语言程序循环运行速度优化方案

C语言常规优化策略——循环优化 C语言常规优化策略3 循环优化提高程序效率的核心是对影响代码执行速度的关键程序段进行优化。在任何程序中,最影响代码速度的往往是循环语句,特别是多层嵌套的循环语句。因此,掌握循环优化的各种实用技术是提高程序效率的利器,也是一个高水平程序必须具备的基本功。本节有关各种循环优化技术的讨论基本上以下面的一个程序段为对象,程序的涵义为:对于两个给定的数组a、b,计算a[8]b[8]+a[ 阅读详情

c语言程序循环运行速度优化方案

问题背景

题目如下:
中国人民大学2018年秋季学期程序设计期末考试第3题
在这里插入图片描述
用下述直接循环n次的方法,虽然能够得到结果,但是运行速度太慢,例如输入111111要38.5s,输入1111111要四分钟以上,无法通过考试验收系统的时间限制。所以考虑减少循环次数和不必要的循环。

#include<stdio.h>
int main()
{
	long long n,h,x,y;
	scanf("%lld",&n);
	long long a,b;
	for(a=1;a<=n/2;a++)
	{
		for(b=2;b<n;b++)
		{
		     x=a+b,y=b-a+1;
	         h=x*y/2;
		if(h==n)
			{
			   printf("[%lld, %lld]\n",a,b);
			  
			}
		}
		
	}
	return 0;
}

在这里插入图片描述

优化思路

在本站查找到这篇文章:
原文链接
该文的思路为通过求出最大枚举范围来缩小循环次数,适用于欲减少循环次数的程序中。

设等差数列:
an=a+(n-1)*d (这里首项为a,公差d=1,第n项为an,前n项和为sn)
a1=a
an=a+n-1
sn=(a1+an)n/2=(2a-1+n)*n/2
再回到这个编程上来:
我们的输入数据其实就是sn,需要找到以a开始的n个连续的递增数列使得和为sn。
这里我们可以用循环来判定,给定一个n,sn已知,就可以求出a,如果a为正整数那么就可以找到等差数列的首项,加上n给定,d=1,那么就可以写出这个和式子。

进一步优化提高程序效率:这里的n无须一直从2开始枚举下去,可以由sn=(2a-1+n)*n/2,所以a=sn/n-n/2+1/2,该式子为递减函数,n越大,a越小,而a最小为1,故另a=1时可确定n的最大范围。

令a=1,得二元一次方程(1/2+n/2)n=sn,即n^2+n-2sn=0,可得方程两个根中取较大的根n=0.5*(-1+sqrt(1+8*sn)),从而确定n的最大枚举范围。

优化代码及结果

原题要求区间从小到大输出,参考文献的输出与题目不符,而且输出次序也与题目不符。作者在参考文献代码的基础上做出了逆序输出的修改,并且修改成题目要求的输出格式。

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	int n,s,an,i,ans,cnt,fg,c[100000]={0},d[100000]={0};
	double a1;
	while(scanf("%d",&n)!=EOF)
	{
		ans=0;
		int mm=0.5*(-1+sqrt(1+8*n)); //枚举的最大范围 
		
		for(cnt=mm;cnt>=2;cnt--)    //逆序循环
		{
			a1=(2*n+cnt-cnt*cnt)*1.0/(2.0*cnt);
			if(int(a1)==a1&&a1>0)
			{
				printf("[%d",int(a1));
				for(i=1;i<=cnt-1;i++)
				{
				if(i==cnt-1)
				{
						printf(",%d]",int(a1+i));
				}
			}
				printf("\n");
				ans++;
			}
		}
		break;
		
	}	
	return 0;
}

结果:
111111只需3.952s
在这里插入图片描述
1111111只需要2.731s

可见优化效果良好

鸣谢

感谢妹妹小贾同学提出的问题

VM与欧姆龙PLC通讯设置实战:Fins TCP/UDP协议详解 本文详细解析了VM(VisionMaster)与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战设置。内容涵盖网络配置、协议选择(TCP可靠性与UDP实时性)、VM端地址映射与数据点添加、以及数据接收解析流程,并提供了常见错误排查与高级调试技巧,帮助视觉与自动化工程师快速实现稳定可靠的工业通讯集成。 阅读详情

相关推荐

TI DSP TMS320F280025 Note1:工程模板Template创建

该方法新建的工程支持寄存器开发,同时也支持库函数开发,新建后移动该工程也不需要重新修改路径,路径使用变量定义,使用方便、移植性能高

weixin_52849254的博客 2302

【做题笔记】1887. 使数组元素相等的减少操作次数(4种解法)

题目描述 给你一个整数数组 nums ,你的目标是令 nums 中的所有元素相等。完成一次减少操作需要遵照下面的几个步骤: 找出 nums 中的 最大 值。记这个值为 largest 并取其下标 i (下标从 0 开始计数)。如果有多个元素都是最大值,则取最小的 i 。 找出 nums 中的 下一个最大 值,这个值 严格小于 largest ,记为 nextLargest 。 将 nums[i] 减少到 nextLargest 。 返回使 nums 中的所有元素相等的操作次数。(提示:1 <= num

weixin_51156484的博客 508

新能源知识库(68)复叠压缩式热泵蒸汽系统介绍

复叠压缩式热泵蒸汽系统通过多级压缩技术将低品位热能转化为高品位蒸汽,在汽车电镀场景中实现了高效、精准的能源利用。随着超高温工质与智能联供系统的发展,该技术将深度赋能电镀行业的高质量可持续发展。​:±1℃控温保障镀层均匀性,提升产品良率;多台复叠热泵+储热装置(如纺织厂6台热泵)复叠热泵+余热回收+智能控制(化工厂案例)​:无燃烧设计契合汽车行业ESG目标。单台高温热泵机组(如92P型号)复叠压缩式热泵蒸汽系统以。67.4万元(↓22%)600万–1200万元。事故率 ↓90%​​。150万–600万元。

竹君子之家 1421

[C]for循环的优化

循环优化:for循环尽量保证调用区域小(不要有全局变量),语句简单,不要有循环的函数调用等。 方法: 1:判断语句和表达式:在for循环条件中尽量不要出现表达式,而是只是变量,提升效率(表达式可以在for前面进行计算完成。),内部也是,尽量减少不必要的表达式语句; 2:函数调用:在for循环内,尽量不要出现函数调用,都通过变量+for循环外调用的方式进行,如果内部有if分支内直接break或者r...

小蜗牛之家 1985

Java实现双色球&大乐透随机选号算法——原理详解与代码实战

掌握核心语法:集合操作、随机数生成、排序。贴近实际场景:将编程知识应用于生活问题的解决。

wangchl0932的博客 4984

LVI-SAM实战:如何在Ubuntu20.04上快速复现激光-视觉-惯性里程计系统

本文详细解析了在Ubuntu 20.04环境下部署和优化LVI-SAM激光-视觉-惯性里程计系统的全流程。从环境配置、依赖安装到源码编译和实战调参,提供了完整的解决方案和性能优化策略,帮助开发者快速实现厘米级精度的实时位姿估计。

m3n5b7v8c9x的博客 1047

让for循环减速

for语句不会因为有setTimeout的存在而停止,他会跳过setTimeout,setTimeout设定的是100毫秒的延迟,而for语句执行根本用不了那么长时间,可以使用递归来解决这个问题 var i = 500; function al() { i-=10; if(i &gt; 80){ setTimeout(function() { ...

qq_41619567的博客 557

SAP资产模块(FI-AA)与总账(FI-GL)数据不一致是财务顾问和会计人员最常遇到的棘手问题之一

SAP资产模块(FI-AA)与总账(FI-GL)数据不一致问题主要源于四大原因:1)违规手工记账(最常见),直接通过总账录入资产科目凭证而未通过资产模块;2)折旧运行问题,包括执行失败、跨年度问题或配置冲突;3)主数据与配置错误,如科目确定或折旧键设置不当;4)业务流程遗漏,如单据未生成凭证或汇率差异。解决方案包括运行对账报表、检查凭证来源、补跑折旧及核对配置。关键预防措施是坚持"资产模块发起→自动生成凭证→总账审核"的标准流程。

金牌架构师 428

for循环次数太多的时间优化_超炫酷技巧!C语言代码优化的技巧

一、变量与值得比较1、布尔变量与零值的比较不可将布尔变量直接与 TRUE、 FALSE或者 1、 0进行比较 。据布尔类型的语义,零值为“ 假”(记为 FALSE),任何非零值都是“ 真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。例如 Visual C++ 将 TRUE定义为 1, 而 Visual Basic则将 TRUE定义为-1 。假设布尔变量名字为 flag,它与零值比较的...

weixin_36427956的博客 3265

使用Clumsy和Process Explorer定位软件高CPU占用问题

使用弱网模拟工具Clumsy和进程查看工具Process Explorer定位软件高CPU占用问题。

dvlinker的技术专栏 5709

手把手教你从入门到精通C# Modbus通信

本文是《Modbus通信从入门到精通》的导读,本专栏将会详细介绍ModusRTU 、ModbusASCII、ModbusTCP这三种协议的C#实现,由一个高级工程师多年实战经验总结而成,绝对干货!

qq_34059233的博客 1万+

提升C/C++编程效率:深入C/C++ for循环的优化与应用

提升C/C++编程效率:深入for循环的优化与应用

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 5474

【Windows Server 2019】发布服务器 | 远程桌面服务的安装与配置 Ⅰ——理论,实验拓扑和安装基于RemoteAPP的RDS

博客介绍了Windows Server中远程桌面服务的理论,实验拓扑以及基于RemoteAPP的RDS安装。博文介绍了如何在Windows Server上部署发布服务器。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 6129

C语言编程之运行速度优化方法汇总(转载)

目录 1、选择合适的算法和数据结构 2、使用尽量小的数据类型 2.1 减少运算的强度 (1)查表 (2)求余运算 (3)平方运算 (4)用移位实现乘除法运算 (5)避免不必要的整数除法 (6)使用增量和减量操作符 (7)使用复合赋值表达式 (8)提取公共的子表达式 2.2 结构体成员的布局 (1)按数据类型的长度排序 (2)把结构体填充成最长类型长度的整倍数 (3)按数据类型的长度排序本地变量 (4)把频繁使用的指针型参数拷贝到本地变量 2.3 循环优化 (1)充分...

qq_38719138的博客 8571

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C语言代码优化:让运行速度提升10倍的5个冷技巧

在C语言编程中,代码的运行速度至关重要。无论是嵌入式系统、游戏开发还是高性能计算领域,优化代码以提高运行效率都是开发者们追求的目标。有时候,一些看似不起眼的冷技巧,却能让代码的运行速度实现质的飞跃。本文将为你介绍5个让C语言代码运行速度提升10倍的冷技巧,助你编写出更加高效的程序。

星辰夜语的博客 952

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c语言常用的运行速度优化,C语言程序设计优化(提速)

《C语言程序设计优化(提速)》由会员分享,可在线阅读,更多相关《C语言程序设计优化(提速)(22页珍藏版)》请在人人文库网上搜索。1、1对以下程序代码进行调整,提升程序的运行速度:sea nf(%c,&ch); prin tf(%e, eh);改: 用 get char (), p ut char ();2对以下程序代码进行调整,提升程序的运行速度:if (m / n 9)改:乘法运算比除...

weixin_30767945的博客 1649

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C语言编程优化运行速度

1、选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。 在许多种情况下,可以用指针运算代替数组索引,这样做常常能产生又快又短的代码。与数组索引相比,指针一般能使

xiaoluo91的专栏 1万+

c语言常用的运行速度优化,最基本的C语言代码级别速度优化

1、Short to int描叙:在32位的程序中,使用int类型作循环体的索引变量比short类型具有更好的性能。循环体索引变量指for (i=0; i<9; i++)中的i。背景:在32位的应用程序中使用short将导致机器码变长,同时处理器需要更长的时间处理;不仅如此,大多数编译器在未优化状况下对于short类型,总是将它转换成integer后再做各种操作,操作完后再转换为short类...

weixin_36435442的博客 1042

c语言程序运行内存图解,从执行速度和内存使用等方面来优化C语言代码

在本篇文章中,我收集了很多经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。简介在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量的轻量级JPEG库。期间,我总结了一些让程序运行更快的方法。在本篇文章中,我收集了一些经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。尽管在C代码优化方面有很多的指南,但是...

weixin_30322901的博客 1107

rcpp包 c语言的优化,如何提高备受诟病的R的运行速度

说到R,人们除了赞美它漂亮简洁的做图功能外,就是抱怨它的运行速度问题。做为常规使用,好比数据整理分析,统计计算或者做图等,或许没有感受到它的运行速度有问题。可是若是数据量很大,像基因组数据,那么运行起来就尤为慢了。特别是对于循环语句,犹如老牛拉破车,因此在数据量很大的状况下,尽可能不要在R中使用循环语句。html那么循环语句在R中会慢到什么地步?咱们经过R语言和C语言的比较就能看出一些端倪。编程咱...

weixin_39631689的博客 624

用C语言编写程序计算速度,C语言程序编辑中快程序速度的方法

由于C语言编译出来的程序,不是最有效率的汇编语言,它没有办法达到实时播放。所以程序员为了要使程序执行的速度能够加快,以最佳化的状态使其能够达到实时播放的速度。C6x的编译器提供了最佳化的指令,如在编译时加上-o3的参数,就可以用软件来分析程序员的程序是否有可以改进的地方。如此一来,在产生组语的汇编语言档案之前,编译器就会对程序员所写的C语言程序不断的进行编译,也会对程序中的循环部份重新编排,产生另...

weixin_30114439的博客 1837

c语言优化页面,C语言常规优化策略——循环优化

C语言常规优化策略3循环优化提高程序效率的核心是对影响代码执行速度的关键程序段进行优化。在任何程序中,最影响代码速度的往往是循环语句,特别是多层嵌套的循环语句。因此,掌握循环优化的各种实用技术是提高程序效率的利器,也是一个高水平程序必须具备的基本功。本节有关各种循环优化技术的讨论基本上以下面的一个程序段为对象,程序的涵义为:对于两个给定的数组a、b,计算a[8]b[8]+a[12]b[12]+....

weixin_32451529的博客 625

c语言程序运行时间优化,C语言程序优化工作流程的注意事项

在《【解密】C语言程序优化工作流程(一)》一文中分形科技为大家介绍了关于C语言程序优化工作的三个阶段,且对每个阶段进行的详细的介绍。程序员在进行优经工作时需要根据自身的情况来决定需要优化到哪个阶段。如有不懂之处可及时的联系分形科技的在线客服人员,我们将随时为您提升服务。接下来分形科技小编要为大家介绍的是C语言程序优化工作流程的第二部分内容,也就是C语言程序优化工作流程的一些注意事项,共八个点需要编...

weixin_42355215的博客 1391

c语言for循环优化,C语言优化小技巧

该楼层疑似违规已被系统折叠隐藏此楼查看此楼在编写C语言程序后,经常需要对源码进行优化,以提高程序的运行效率,下面简述几个常用的优化技巧以供大家参考:1.C于代码在程序中的优化现在的C编译器会自动对代码进行优化,但这些优化是对执行速度和代码长度的平衡。如果要获得更小且执行效率更高的代码,需要程序员手工对代码进行优化。2.变量类型的定义不同的数据类型所生成的机器代码长度相差很多,变量类型选取的范围越...

weixin_39887546的博客 1124

for循环优化 c语言,C语言优化小技巧

该楼层疑似违规已被系统折叠隐藏此楼查看此楼在编写C语言程序后,经常需要对源码进行优化,以提高程序的运行效率,下面简述几个常用的优化技巧以供大家参考:1.C于代码在程序中的优化现在的C编译器会自动对代码进行优化,但这些优化是对执行速度和代码长度的平衡。如果要获得更小且执行效率更高的代码,需要程序员手工对代码进行优化。2.变量类型的定义不同的数据类型所生成的机器代码长度相差很多,变量类型选取的范围越...

weixin_32340873的博客 1016
上一篇: 如何用PS去掉照片水印
好一想想
博客等级 码龄7年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值