zoukankan      html  css  js  c++  java
  • AOJ.800 热身之开关灯

    热身之开关灯

    Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
    Total Submission: 276 Submission Accepted: 103

    Description

    吃完草莓以后,机房的小伙伴们要开始做些运动。在ACM实验室里有N盏灯编号为1到N,起初都是开着的,从第一盏灯开始,凡是编号是一的倍数的灯的开关都要被按一遍(亮的变成暗的,暗的变成亮的),
    然后到第二盏灯,凡是编号是二的倍数的灯的开关都要被按一遍,一直到第N盏灯,凡是编号是N的倍数的灯都要被按一遍。那么问题来了,在灯质量比较好的情况下,最后还有多少盏灯是亮着的。

    Input

    题目包括多组输入
    只有一行,这一行只有一个数N,1<=N<=1000

    Output

    输出一行,这一行也只有一个数,就是亮着灯的个数

    Sample Input

    3

    Sample Output

    2

    Hint

    经过第一个灯的时候1,2,3号灯都按了依次,经过第二个灯的时候,2号灯按了一次,经过第三个灯的时候,3号灯按了一次,最后只有2,3灯还亮着。

    题意分析

    用数组实现开关灯。首先用memeset把数组置为0代表开灯,然后用循环处理i的倍数,如果数组为0则变成1,最后遍历数组计数数组单元为0的个数。

    代码总览

    /*
        Title:AOJ.800
        Author:pengwill
        Date:2016-11-14
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define maxsize 1005
    /*
        NOTE: 1.如果是判断==0 写!()
              2.如果判断!=0 直接写就行
    */
    int lamp[maxsize];
    void go(int * a);
    int main()
    {
        int n,k;
    
        int i,j,flag = 0,cnt = 0;
        while(scanf("%d",&n) != EOF){
        cnt = 0;
        memset(lamp,0,sizeof(lamp));
        for(i = 1;i<=n;++i){
           for(j = i;j<=n;j+=i){
            go(&lamp[j]);
           }
        }
        for(i = 0;i<n;++i){
            if(lamp[i] ==0 ){
                cnt++;
            }
        }
        printf("%d
    ",cnt);
    }
        return 0;
    }
    void go(int * a)
    {
        if(!*a ){
            *a = 1;
        }else{
            *a = 0;
        }
    }
    
  • 相关阅读:
    关于标签类的注意事项
    层叠样式表css的优先级
    link常用的作用
    html中属于布尔类型的属性
    行级标签和块级标签的区别
    拥有inline-block属性的标签
    JDK中的Timer和TimerTask详解(zhuan)
    关于 MySQL LEFT JOIN 你可能需要了解的三点(zhuan)
    Logger日志级别说明及设置方法、说明 (zhuan)
    Velocity教程 (zhuan)
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367246.html
Copyright © 2011-2022 走看看