第3章 编程问题 3.2节 2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/young2415/article/details/72240200

题目描述:
有一天晚上,邮差Peter感到非常无聊,为了打破夜班的单调,他使用邮局中的一行邮箱进行了以下的实验。这些邮箱被从1~150进行了编号,然后从邮箱2开始,他打开了所有编号为偶数的邮箱的门,而保持其他邮箱的门关着。接着,从邮箱3开始,每个3个邮箱,如果这个邮箱的门是关着的他就打开这个邮箱的门,而如果门是开着的,他就关上门。然后他每隔4个邮箱重复这个过程,如此下去。当结束时,他被关着的邮箱的分布所惊讶了。编写一个程序来判断哪些邮箱是关着的。

C++实现:

#include <iostream>
using namespace std;
#define CAPACITY 150 //表示150个邮箱

void main() {
    bool mailBox[CAPACITY+1] = { 0 };/*申请151个元素,只用1~150,将所有元素的值设为false,表示关闭*/
    int k = 2;
    while (k <= CAPACITY) {
        for (int i = k; i <= CAPACITY; i += k) {
            mailBox[i] = !mailBox[i];  /*如果是false,设置为true;如果是true,设置为false*/
        }
        k++;
    }

    /*输出值为false的元素下标,即关着的邮箱编号*/
    for (int i = 1; i <= CAPACITY; i++) {
        if (mailBox[i] == false) {
            cout << i << endl;
        }
    }
    system("pause");
}

最后输出的是150以内的正整数的平方。

运行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/young2415/article/details/72240200