POJ1218 THE DRUNK JAILER

来源:互联网 发布:快手用户数据 编辑:程序博客网 时间:2024/06/16 14:54

问题链接:POJ1218 THE DRUNK JAILER。

题意简述:输入n,n为5-100间的一个数,代表有多少间牢房。刚开始所有房间打开,第1轮2的倍数的房间门翻转(打开的关上,关上的打开),第2轮3的倍数,第3轮4的倍数,......,第n-1轮n的倍数。求最后有几间牢房门是打开的。

问题分析:使用模拟法,模拟这个过程即可。好在计算规模不算大。

AC的C语言程序如下:

/* POJ1218 THE DRUNK JAILER */#include <stdio.h>#include <memory.h>#define MAXN 100int cell[MAXN+1];int main(void){    int t, n, sum, i, j;    scanf("%d", &t);    while(t--) {        scanf("%d", &n);        memset(cell, 0, sizeof(cell));        for(i=2; i<=n; i++)            for(j=i; j<=n; j++)                if (j%i == 0)                    cell[j] = 1 - cell[j];        sum = 0;        for(i=1; i<=n; i++)            if(cell[i] == 0)                sum++;        printf("%d\n",sum);    }    return 0;}

还有一种大牛做的,直接计算的方法,其数学道理真的不懂。AC的C语言程序如下:

/* POJ1218 THE DRUNK JAILER */#include <stdio.h>#include <math.h>int main(void){    int t, n, ans;    scanf("%d",&t);    while(t--) {        scanf("%d", &n);        ans = (int)sqrt(n);        printf("%d\n", ans);    }    return 0;}



1 0
原创粉丝点击