开灯问题(算法竞赛入门经典)

#include <stdio.h>
#include "stdafx.h"
#include <iostream>
#include<time.h>
#include<iomanip>
#include<string.h>
#define maxn 1005
using std::cin;
using std::cout;
int a[maxn];//数组a[]的定义要放在全局位置,再在主函数内进行赋值操作,否则会报错
int main() {
    memset(a, 0, sizeof(a));
    int n, k, first = 1;
    cout << "Please enter two numbers:" << std::endl;
    cin >> k >> n;
    if (k <= n && n << 1000) {
        for (int i = 1; i <= k; i++) {//每人操作一次,所以外循环是人
            for (int j = 1; j <= n; j++) {//每盏灯都要被每个人操作一次,所以内循环是人
                if (j%i == 0)
                    a[j] = !a[j];//非常有趣的地方
                for (int m = 0; m <= n; m++) {
                    if (a[m]) {
                        if (first) first = 0;//这里的first是为了避免多余的首元素输出
                        else cout << m << std::endl;
                    }
                }
            }
        }
    }
    else
        cout << "Wrong number" << std::endl;
}

猜你喜欢

转载自www.cnblogs.com/NK-007/p/9172481.html