各位DALAO,我想问个问题

P1046 [NOIP2005 普及组] 陶陶摘苹果

baoyu_ @ 2023-07-10 20:16:54

首先看代码:

#include <iostream>
using namespace std;
int height[15],n,s;
int main()
{
    for(int i=0;i<10;i++){
        cin >> height[i];
    }
    cin >> n; 
    n += 30;
    for(int i=0;i<10;i++){
        s+=!(n<height[i]);
    }
    cout << s;
}

(这个代码是AC的)

但是——

我将

s+=!(n<height[i]);

改为了

if(n<height[i]){
    s++;
}

咋就不对了呢?QAQ

有没有DALAO帮解读啊


by 培淇2021 @ 2023-07-10 20:18:38

630000


by hank0402 @ 2023-07-10 20:19:32

不是,你这原句的意思是 :

if(!(n<height)) ++s;

不是很理解您的改动。


by Rieman_sum @ 2023-07-10 20:20:39

630000!

提前预定


by hank0402 @ 2023-07-10 20:21:07

630000!


by xiaobeng_0912 @ 2023-07-10 20:21:27

我抢到629999


by Auto_Accepted @ 2023-07-10 20:23:13

630000!qp


by dtrthg @ 2023-07-10 20:23:15

!(n<height[i])表示n<height[i]是否不成立

if(n<height[i])表示n<height[i]是否成立


by baoyu_ @ 2023-07-10 20:28:22

这俩意思有什么不同吗?QWQ


by baoyu_ @ 2023-07-10 20:34:03

蟹蟹(・ω・)ノ


by Sky_Aurora @ 2023-09-10 14:55:02

这2段代码的意义是不一样的,让我们假设n < height[i]的结果为false,s会++.\ 但此时,下方的代码因为条件是0,所以不会执行,s就不会++,这2段代码的意义是相反的. 正确的代码:

s+=!(n<height[i]);

应该改为

if(!n<height[i]){
    s++;
}

AC.


|