百灯判熄

1122 百灯判熄

题目描述

有M盏灯,编号为1~M,分别由相应的M个开关控制。开始时全部开关朝上(朝上为开,灯亮),然后进行以下操作:编号凡是1的倍数的灯反方向拨一次开关;是2的倍数的灯再反方向拨一次开关;是3的倍数的灯又反方向拨一次开关,......,直到是M的倍数的灯又反方向拨一次开关。请从键盘输入一个整数m代表灯的数量,求出最后为熄灭状态的灯(不亮)的数量以及编号并输出。

输入描述

/*
输入一个整数m(1≤m≤100)。
*/
100

输出描述

/*
输出为两行,第一行是熄灭状态的灯的数量;第二行是最后为熄灭状态的灯的编号(每个数据以4列的域宽显示)。
*/
10
1   4   9   16   25   36   49   64   81 100
#include<stdio.h>
#include<string.h>

//直接暴力枚举就完事了
void lighton(int n){
    int i=0;
    int j=0;
    int arr[100] = {0};
    int sum=0;
    for(i=1;i<=n;i++)
        for(j=0;j<n;j++)
            if((j+1)%i==0)
                arr[j] = !arr[j];
    for(i=0;i<n;i++)
        if(arr[i]==1)
            sum++;
    printf("%d
",sum);
    for(i=0;i<n;i++)
        if(arr[i]==1)
            printf("%d ",i+1);
    printf("
");
}

int main()
{
    int n=0;
    scanf("%d",&n);
    lighton(n);
    return 0;
}

原文地址:https://www.cnblogs.com/lwp-nicol/p/14285038.html