版权声明:本文为博主原创文章,未经博主允许不得转载。 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以内的正整数的平方。
运行结果: