首页 > 试题广场 >

下面程序的输出是? #include stdi

[单选题]
下面程序的输出是()
#include <stdio.h>

int main() {
    int m = 0;
    for (int i = 1; i <= 100; i++) {
        for (int j = 1; j <= i; j++) {
            if (j % 2 != 0)
                continue;
            m++;
        }
    }
    printf("%d\n",m);
    return 0;
}


  • 2500
  • 2501
  • 2550
  • 2551

首先确定内层循环是用来找 1 ~ i 中偶数出现次数的.
其中1 ~ N的偶数出现次数大概如下表所示:

N 偶数出现次数
1 0
2 1
3 1
4 2
5 2
6 3
7 3
......
N n/2

题目求1 ~ 1 + 1 ~ 2 + 1 ~ 3 + ... + 1 ~ N的偶数出现次数.

可以发现最后结果是1+1+2+2+3+3+...+n/2(还得判断n是否为偶数,为偶数只有一个n/1,为奇数有两个n/2,具体情况可看上表得知)

因为题目中n=100,为偶数,则n/2只出现一次
将式子化简为 ,则可以运用等差公式:

这时将得到的2450加上之前得到的n/2=50,即2450+50 = 2500

发表于 2019-09-03 13:40:15 回复(1)
人肉代码运行器

发表于 2021-07-15 09:41:59 回复(0)
首先看限制条件,如果两个都是100的话就直接是100*100=10000,但第二层的循环为for (int j = 1; j <= i; j++),所有就直接砍一半,(这里恒容易联想到9*9乘法表,斜对称的),
再加上题目含有if (j % 2 != 0),所以又砍一半,所以就为原来的4分支1,故为2500.
每一题都有他独特的方法,不要死记
发表于 2023-07-27 14:05:23 回复(1)
发表于 2022-11-26 22:19:35 回复(1)
j:1->1
	m += 0
j:1->2
	m += 1
j:1->3
	m += 1
j:1->4
	m += 2
...
j:1->100
	m += 50
=>
m += 0 + 1 + 1 + 2 + 2 + ... + 50 (+ 50对于101
m = 2 * (1 + 49) * 49 / 2 + 50 = 50 * 49 + 50 = 50 * (49 + 1) = 2500

发表于 2019-08-05 22:42:18 回复(0)
50*50=2500
编辑于 2024-02-24 21:19:45 回复(0)

首先,让我们分析这段代码的功能。

代码中有两个嵌套的for循环。外层循环i从1到100,而内层循环j从1到i。如果j是奇数,则使用continue跳过内层循环的其余部分并继续下一次迭代。如果j是偶数,则m的值增加1。

因此,这段代码计算的是从1到100的所有数字范围内的偶数的总数。

为了计算这个数值,我们不必使用嵌套循环。我们只需要知道1到100之间有多少个偶数。从1到100,每隔一个数字就是一个偶数,所以总共有50个偶数。

但如果你希望使用代码来解决,那么现有的代码就可以正确计算这个结果。当运行这段代码时,输出的结果应该是:

复制代码
2500

这是因为从1到100的每一个数字,都有一半的机会是偶数(除了100,它本身是偶数)。因此,对于100个数字中的每一个,平均有50次增加m的机会,导致结果为2500。

发表于 2023-11-02 17:44:30 回复(0)
有没有可能50*50就出来了?
发表于 2023-02-20 17:08:12 回复(0)
就是看 1 1 2 1 2 3 1 2 3 4 ....中偶数的个数 考虑2存在的个数除了第一个没有其余99行都有。 接下来是考虑4出现的个数,除了前三行没有其余97行都有 依次类推, 100最后一行有。 故数量是 1 3 5 ..... 99的等差数列。 用等差数列求和公式可得出结果2500
发表于 2022-11-07 18:38:42 回复(1)
我想问下,这种题要是忘了数列,怎么办...
发表于 2021-09-06 20:18:34 回复(3)