开关灯问题
題目描述
有若干只燈排成一排。所有的燈開始的時候都是關(guān)閉的,現(xiàn)對這些燈進行一系列的操作。在第i次操作的時候,調(diào)整所有編號是i的倍數(shù)的燈的狀態(tài)(原本打開的燈將它關(guān)閉,原本關(guān)閉的將它打開)。
輸入
每組測試數(shù)據(jù)占一行,包含一個整數(shù)n( 0 < n <= 10^5)
輸出
經(jīng)過無限次操作之后,第n只燈的狀態(tài)(0表示關(guān),1表示開)
樣例輸入
1
5
樣例輸出
1
0
?
?
?
?
思路:
開一個10^5的數(shù)組,用來表示一排燈
用memset函數(shù)將數(shù)組全部元素置0;
問題重點在第n只燈的狀態(tài)(0表示關(guān),1表示開)
所以只需設(shè)置1個計數(shù)變量
然后用for循環(huán)對n以內(nèi)的數(shù)進行判斷
結(jié)束循環(huán)后判斷計數(shù)變量為奇數(shù)還是偶數(shù)
再輸入即可。
?
代碼如下:
#include<iostream> #include<string.h> using namespace std; #define maxn 100000 int a[maxn]; int main() {intn,cnt;memset(a,0, sizeof(int)*maxn);while(cin>>n){cnt= 0;for(int i = 1; i<= n; i++){if(n%i == 0)cnt++;}if(cnt%2==0)cout << 0 << endl;elsecout << 1 << endl;}return0; }?
?
還有1個類似的問題:
?
n盞燈,第一個人把所有的燈打開,第n個按下所有編號為n的倍數(shù)的開關(guān)(其中關(guān)掉的燈將被打開,開著的燈將被關(guān)閉)。共K個人,問最后有哪些燈開著。輸入n和k,
k小于等于n小于等于1000
代碼如下:
#include<iostream> #include<cstdio> #include<cstring> using namespacestd; #define maxn1010 int a[maxn]; int main() {int n, k, frist = 1;memset(a, 0, sizeof(a));cin >> n >> k;for (int i = 1; i <= k; i++){for (int j = 1; j <= n; j++){if (j%i == 0)a[j] = !a[j];}}for (int i = 1; i <= n; i++){if (a[i]){if (frist) frist = 0;else cout << ' ';cout << i;}}cout << '\n';return 0; }?
?
?
總結(jié)
- 上一篇: SAP BASIS ADM100 中文版
- 下一篇: 阿里宝卡选取自己心仪的靓号