错误总结(持续更新)

本文通过两个C++代码示例,展示了如何进行循环优化以减少运行时间,以及在处理数列问题时如何准确理解题目要求。第一个例子通过减少循环次数实现了冬眠算法的优化,第二个例子则强调了在判断数列中3的倍数个数时,应避免不必要的计算。这两个案例突显了在编程实践中,高效算法和精确理解题意的重要性。
摘要由CSDN通过智能技术生成

一、循环优化

eg冬眠

优化:减少循环次数节约时间 

#include<bits/stdc++.h>
using namespace std;

int main(){
    int d,n,sum=0,a[100000];
    cin>>d>>n;
    for(int i=0;i<n;i++){
    	cin>>a[i];
    	sum+=a[i];
	}
	int cnt1=0,cnt2=0,i=0;
    cnt1=d/sum;//看看有几个可以被整除; 
	d=d%sum;//余数一定小于sum,只循环一次就可以了 
	
	while(d>0){
		d=d-a[i++];
		cnt2++;
	}
	cout<<cnt1*n+cnt2;
}

二、读题准确,思路要清晰

题目要求该数列中有几个为3的倍数,判断三的倍数的条件为---个位数字之和为3的倍数,此题刚好为各位数字相加

多此一举

#include<bits/stdc++.h>
using namespace std;

int main(){
   long long n;
   cin>>n;
   long long shu=0;
   long long cnt =0;
   	for(int i=1;i<=n;i++){
   		long long a=0;
   		long long m=shu+i;
   		long long k=m;
   	while(m!=0){
      	a=a+m%10;
   	    m=m/10;
   }
   if(a%3==0)
         cnt++;
	   shu=k*10;
   }
   printf("%lld",cnt);
   
	
}

 正确做法

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,cnt=0,sum=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		sum+=i;
		if(sum%3==0){
			cnt++;
		}
	}
	printf("%d",cnt);
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值