poj 1218(经典开关问题,模拟)
?經(jīng)典開(kāi)關(guān)問(wèn)題:
大概意思如下:一個(gè)監(jiān)獄看守員喝醉了酒,于是把監(jiān)獄每扇門(mén)都打開(kāi)(假設(shè)有n扇門(mén));然后再?gòu)?號(hào)門(mén)開(kāi)始,隔一扇關(guān)一個(gè)門(mén)(把2的倍數(shù)的門(mén)關(guān)掉);接著再?gòu)?號(hào)門(mén)開(kāi)始,隔2扇操作一個(gè)門(mén)(操作3的倍數(shù)的門(mén),原來(lái)是開(kāi)的關(guān)掉,關(guān)著的則打開(kāi))。這樣一直操作到n的倍數(shù),問(wèn)最后有多少扇門(mén)是打開(kāi)的。
這個(gè)也可以叫關(guān)燈問(wèn)題:有n個(gè)燈,分別由n個(gè)開(kāi)關(guān)控制,撥一下開(kāi)關(guān)則可以改變燈的狀態(tài)(開(kāi)->關(guān) 關(guān)->開(kāi))。初始狀態(tài)燈都是關(guān)著的,先把每個(gè)開(kāi)關(guān)都撥一下,然后撥一下2的倍數(shù)的開(kāi)關(guān),接著3的倍數(shù),直到n的倍數(shù),問(wèn)最后有多少燈是開(kāi)著的。
?
模擬:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int main() 6 { 7 int T; 8 cin>>T; 9 while(T--) 10 { 11 int n; 12 int i,j; 13 cin>>n; 14 int a[117]; 15 memset(a,0,sizeof(a)); 16 for(i=1; i<=n; i++) 17 { 18 for(j=1;j<=n;j++) 19 { 20 if(j%i==0)a[j]=!a[j];// 每一次都取相反狀態(tài) 21 } 22 } 23 int k=0; 24 for(i=1;i<=n;i++) 25 { 26 if(a[i]!=0)k++;//如果不等于0,則說(shuō)明燈開(kāi)著 27 } 28 cout<<k<<endl; 29 } 30 return 0; 31 }轉(zhuǎn)載于:https://www.cnblogs.com/wally/archive/2012/07/14/2591885.html
總結(jié)
以上是生活随笔為你收集整理的poj 1218(经典开关问题,模拟)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 部队反渗透是什么意思?
- 下一篇: 在坦克大作战中被寄生虫寄生的是哪两个坦克