这是一道很简单的题目,题目大概意思说下:就是有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\n",esp);
    }

    return 0;
}

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-09
  • 2021-08-25
  • 2021-12-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-17
  • 2021-05-23
  • 2021-11-17
  • 2021-06-19
  • 2021-10-09
  • 2022-01-17
相关资源
相似解决方案