《算法競賽入門經典》學習筆記

第三章 算法競賽入門經典

3-2 開燈問題

有n盞燈,編號爲1~n。第1我的把全部燈打開,第2我的按下全部比編號爲2的倍數的開關(這些燈將被關掉),第3我的按下全部編號爲3的倍數的開關(其中關掉的燈江北打開,開着的燈將被關閉),以此類推,一共有k我的,問最後有哪些等開着?輸入nk,輸出開着的燈的編號。k≤n≤1000算法

樣例輸入:數組

7 3

樣例輸出:code

1 5 6 7
#include<stdio.h>
#include<string.h>
#define maxn 1010
int a[maxn];
int main()
{
    int n,k,first=1;
    memset(a,0,sizeof(a));    //清零數組
    scanf("%d%d",&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(first) first = 0;
            else printf(" ");
            printf("%d",i);
        }
    printf("\n");
    return 0;        
}
相關文章
相關標籤/搜索