有n盞燈,編號為1~n,第1個人把所有燈打開,第2個人按下所有編號為2的倍數開關(這些燈將被關掉),第3個人按下所有編號為3的倍數的開關,以此類推,一共有k個人,問最后有哪些燈開著?輸入n和k,輸出開著的燈的編號,k<=n<=100
樣例輸入 7 3
樣例輸出 1 5 6 7
#include<stdio.h>
#include <stdlib.h>
typedef struct light{
int state; // state 為 0 時代表燈是關著的,為 1 時代表燈是亮著的
struct light *next;
};
int main(void)
{
int num, k, i, j;
light *light_state = NULL;
light *head = NULL, *temp = NULL;
printf("請輸入燈的數量n,人的數量k:");
scanf("%d %d", &num, &k);
for(i = 0; i < num; i++) // 創建長度為 num 的鏈表
{
light_state = (light*)malloc(sizeof(light));
if (head == NULL)
head = light_state;
else
temp->next = light_state;
light_state->next = NULL;
light_state->state = 0;
temp = light_state;
}
for(j = 0; j < k; j++)
{
light_state = head;
for(i = 0; i < num; i++)
{
if((i + 1) % (j + 1) == 0) // 燈的編號符合需要對應的人按開關時
if(light_state->state == 0)
{
light_state->state = 1;
}
else if(light_state->state == 1)
{
light_state->state = 0;
}
light_state = light_state->next;
}
}
printf("開著的燈的編號為:");
light_state = head;
for(i = 0; i < num; i++)
{
if(light_state->state == 1)
{
printf("%d ", i+1);
}
light_state = light_state->next;
}
printf("\n");
system("pause");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95034.html
標籤:C++
