• THE DRUNK JAILER


    http://poj.org/problem?id=1218

    开关门问题,初始化门(编号1~n)都是关着的,改变状态为开变关、关变开:  第1遍,全部改变状态;第2遍,编码2的倍数的门改变状态; 第3遍,编码3的倍数的门改变状态

    ……第n遍,编码n的倍数的门改变状态;

    结束后,有多少扇门是开着的

    法一:

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int t, n, i, j ;
     6     int a[110] ;
     7     scanf("%d", &t) ;
     8     while(t--)
     9     {
    10         scanf("%d", &n) ;
    11         memset(a, 0, sizeof(a)) ;//初始化,0代表门关着
    12         for(i=1; i<=n; i++)
    13         {
    14             for(j=1; j<=n; j++)
    15             {
    16                 if(j%i==0)
    17                 a[j] = !a[j] ;//取相反状态
    18             }
    19         }
    20         int count = 0 ;
    21         for(i=1; i<=n; i++)
    22         {
    23             if(a[i]!=0)
    24             count++ ;
    25         }
    26         printf("%d\n", count) ;
    27     }
    28     return 0 ;
    29 }

    法二:求约数个数为奇数的数的个数,简单来说就是求n以内(含n)完全平方数的个数

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 int main()
     5 {
     6     int t, n, i, x ;
     7     int a[110] ;
     8     a[5] = 2 ;
     9     for(i=6; i<=100; i++)//打表
    10     {
    11         x = (int)(sqrt(i)) ;
    12         if(x*x==i)
    13         a[i] = a[i-1] + 1 ;
    14         else
    15         a[i] = a[i-1] ;
    16     }
    17     scanf("%d", &t) ;
    18     while(t--)
    19     {
    20         scanf("%d", &n) ;
    21         printf("%d\n", a[n]) ;
    22     }
    23     return 0 ;
    24 }
  • 相关阅读:
    Manjaro中添加gitee的公钥部署
    另类的linux系统
    mac的快捷键flykey应用
    tidb总览
    raft算法
    tidb的tidb
    tidb的tikv
    tidb的pd
    切尔诺贝利事故
    血钻
  • 原文地址:https://www.cnblogs.com/yelan/p/3012375.html
Copyright © 2020-2023  润新知