确实是很简单的一道题,不过还是有很多细节可以优化的,先贴上未优化的代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10],m,i,count=0;
for(i=0;i<10;i++){
cin>>a[i];
}
cin>>m;
for(i=0;i<10;i++){
if(a[i]-m<=30)
count++;
}
cout<<count<<endl;
return 0;
}
按照思路一步步来
输入没有什么可优化的
if(a[i]-m<=30) count++可以好好优化
这一大步,计算机需要分成以下几小步
1.计算a[i]-m的值
2.与30比较(true|false)
3.再判断if语句中的表达式是否为真
4.判断结束,为真则count++
实际上,直接k=m+30,做一次,然后只要比较k和a[i]的大小就可以了,第一步可以省掉了。
下面参考了洛谷一位大佬的做法,他联想到count加的是1
而 true==1,false==0
所以直接把true的结果加上去即可
即count+=(a[i]<=k);
贴出优化后的代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10],m,i,count=0,k;
for(i=0;i<10;i++){
cin>>a[i];
}
cin>>m;
k = m + 30;
for(i=0;i<10;i++){
count+=(a[i]<=k);
}
cout<<count<<endl;
return 0;
}
emmmm虽然看起来差不了多少,但实际上确实是做到了给就计算机减负,只是因为这里的计算量比较小而已,一道小题目也是可以引发很多思考的。