杭電 2053 Switch Game

http://acm.hdu.edu.cn/showproblem.php?pid=2053

#include<stdio.h>
#include<string.h>
int a[100001];
int main(){
	int n,i,j;
	while(scanf("%d",&n) != EOF)
	{
		memset(a,0,sizeof(a));
		for(i = 1;i <= n;i++){
			for(j = i;j <= n;j+=i){
				if(j%i == 0) a[j] = !a[j];
			}			
		}
		printf("%d\n",a[n]);
	}
	return 0;
}

《算法競賽入門經典》第35頁類似的開燈問題

題目: 有n盞燈,編號爲1~n.第一個人把所有的燈打開,第2個人按下所有編號爲2的倍數的開關(這些燈將被關),第3個人按下所有編號爲3 的倍數的開關(開着的燈關掉,關着的燈被打開),以此類推,一共有k個人,問最後有哪些燈開着?輸入:n和k,輸出開着的燈的編號。k<=n<=1000

 樣列輸入: 7 3
 樣列輸出: 1 5 6 7

#include <stdio.h>
#include <string.h>
#define MAXN 1000 + 10
int a[MAXN];
int main()
{
    int i,j,n,k,first = 1;
    memset(a,0,sizeof(a));
    scanf("%d%d",&n,&k);
    for(i = 1; i <= k; i++)
        for(j = 1; j <= n; j++)
            if(j % i == 0)
            {
                a[j] = !a[j];
            }
    for(i = 1; i <= n; i++)
        if(a[i])
        {
            if(first)
            {
                first = 0;
            }
            else
            {
                printf(" ");
            }
            printf("%d",i);
        }
    printf("\n");
    return 0;
}
設置標誌變量first,表示當前要輸出的變量是否爲第一個,第一個變量前不應有空格,但其它都有。

發佈了38 篇原創文章 · 獲贊 12 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章