问题:一共100个灯泡,分别有亮和关两个状态。第一轮,全部亮。第二轮,2,4,6,8,也就是偶数,熄灭(状态转换)。第三轮,3,6,9,12,状态转换。以此类推,求出第n轮的灯泡亮的情况。
发生状态转换了,刚看题目的时候,以为是亮的关闭,没有考虑熄灭的再打开。问题想简单了。下面直接上源码。
#include <iostream>
using namespace std;
void get_light(int n, int a[], int m){
if(n>=2){
for(int i=2; i<=n; i++){
for(int j=0; j<m; j++){
if((j+1)%i==0){
a[j] = -1*a[j];
}else{
a[j] = a[j];
}
}
}
}
for(int i=0; i<m; i++){
if(a[i]>0)
cout<<a[i]<<" ";
}
cout<<endl;
}
int main(){
while (true){
int a[100];
for (int i=0; i<100; i++){
a[i] = i+1;
}
int n, m=100;
cout<<"请输入第几轮(0结束):";
cin >>n;
if (0==n)
break;
get_light(n, a, m);
}
return 0;
}
思想就是:只要是n的倍数,就发生状态转换,应该有提高效率的做法,我暂且只能想到这里了,还请诸位指正。