第3章 编程问题 3.2节 2

来源:互联网 发布:linux jre6安装 编辑:程序博客网 时间:2024/06/09 17:34

题目描述:
有一天晚上,邮差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以内的正整数的平方。

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

原创粉丝点击