1. 程式人生 > 其它 >一本通 2036:【例5.3】開關門

一本通 2036:【例5.3】開關門

2036:【例5.3】開關門


時間限制: 1000 ms         記憶體限制: 65536 KB
提交數: 16571     通過數: 10400

【題目描述】

賓館裡有n(2n1000)n(2≤n≤1000)個房間,從1n1∼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<<" ";
  }
 }
}