一本通 2036:【例5.3】開關門
阿新 • • 發佈:2022-05-11
2036:【例5.3】開關門
時間限制: 1000 ms 記憶體限制: 65536 KB
提交數: 16571 通過數: 10400
【題目描述】
賓館裡有n(2≤n≤1000)n(2≤n≤1000)個房間,從1∼n1∼n編了號。第一個服務員把所有的房間門都打開了,第二個服務員把所有編號是22的倍數的房間“相反處理”,第三個服務員把所有編號是33的倍數的房間作“相反處理”…,以後每個服務員都是如此。當第nn個服務員來過後,哪幾扇門是開啟的。(所謂“相反處理”是:原來開著的門關上,原來關上的門開啟。)
【輸入】
房間數nn。
【輸出】
一行,由小到大的開啟門的房間序號,各序號之間用一個空格隔開。
【輸入樣例】
100
【輸出樣例】
1 4 9 16 25 36 49 64 81 100
程式碼如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
int a;
cin>>a;
int b[1000];//0為關,1為開
for(int i=1;i<=a;i++){
b[i]=0;//把每個數一開始都定義為關門
}
for(int i=1;i<=a;i++){
for(int j=1;j<=a;j++){
if(j%i==0){
b[j]=1-b[j];//這裡是一個小技巧,注意這個公式
}
}
}
for(int i=1;i<=a;i++){
if(b[i]==1){
cout<<i<<" ";
}
}
}