ZOJ Problem Set

这是一道很简单的题目,题目大概意思说下:就是有n个监狱(编号从1到n),第一次全部打开,第二次打开编号为2的倍数的,第三次打开编号为3的倍数的,以此类推。。。最后问你有几个监狱是打开的

题目中我使用了memset函数来为数组初始化,发现了自己一个以前疏忽的地方

1.void * memset(void*,int,size_t)

这里的size需要注意是以字节为单位,所以当你为个数为n的整型数组赋初值时要这样写memset(name,1,n*sizeof(int));

2.memset在头文件string.h中

3.memset只能赋初值0或者1(这个好理解,因为计算机中bit只有这两种状态)

代码:

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    int cell[101],lines,n;
    scanf("%d",&lines);

    while(lines--)
    {
        memset(cell,0,101*sizeof(int));
        scanf("%d",&n);
        int i,r;
        
        for(r=2;r<=n;r++)
        {
            for(i=r;i<=n;i+=r)
            {
                if(cell[i])
                    cell[i]=0;
                else
                    cell[i]=1;
            }
        }

        int esp=0;
        for(i=1;i<=n;i++)
        {
            if(!cell[i])
                esp++;
        }

        printf("%d
",esp);
    }

    return 0;
}
原文地址:https://www.cnblogs.com/xlturing/p/3357352.html