lalalala


私信TA

用户名:zhangshuo

访问量:151921

签 名:

像狗一样的学习,像绅士一样地玩耍。

等  级
排  名 6
经  验 30146
参赛次数 10
文章发表 201
年  龄 12
在职情况 学生
学  校 芜湖市第十一中学
专  业

  自我简介:

今日懒惰流下的口水,将会成为明日里伤心的泪水。

解题思路:

很简单,但是可以对代码进行多次优化。

首先,常规读入高度和身高,这个没什么可优化的。

接下来分两步,一个是比较,一个是计算。

常规做法基本上是 if(height[i] <= H + 30)s++;

但是,对于部分要卡常的题目来说,可能会爆掉,而且每次都调用寄存器来计算 H+30,很显然是一种浪费。

首先我们可以像多数题解那样,在读入 H 之后,直接对它进行 +=30的操作。

但是实际上,比较的行为也可以简化。

if(height[i] <= H )s++; 电脑计算的时候分为三步:

计算 height[i] <= H 的值 (true | false)

调用if判断里面表达式的值是否为真

若真,对s进行s+=1的运算。

我们简化时可以发现,s每次加的值都是恒定的 1 。

联想到 : true == 1 , false == 0 , 我们可以直接将逻辑值的结果加给s。

也即 s+=!(H<height[i]);

CPP代码如下

#include<iostream>
#include<cmath>
using namespace std;
int a[15];
int main()
{
    int b,B,A;
       for(int i=1;i<=10;i++)
               cin>>a[i];
           cin>>b;
           B=b+30;
          int c=0;
           for(int i=1;i<=10;i++)
               {
                 if(a[i]<=B)  
                  c++ ;
                }
         cout<<c;
   return 0;
}

 

0.0分

48 人评分

  评论区