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