zoukankan      html  css  js  c++  java
  • HDU 1337 && POJ 1218&& zju 1350 方法总结

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1337 杭电  

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

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1350浙江

    原本以为小小的一道水题不值得去总结,但是发现却有好多方法,好神奇啊

    方法一:数据挺小的模拟就好 

    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    
    int a[110];
    int main()
    {
        int t, n;
        scanf("%d", &t);
        while(t--)
        {
            memset(a, 0, sizeof(a));
            scanf("%d", &n);
            for(int i=1; i<=n; i++)
            {
                for(int j=i; j<=n; j+=i)
                {
                    a[j]=a[j]^1;
                }
            }
            int ans=0;
            for(int i=1; i<=n; i++)
            {
                if(a[i]==1)
                    ans++;
            }
    
            printf("%d
    ", ans);
        }
        return 0;
    }
    

    方法二:其实犯人是否能够逃跑是有规律可循的,门有开/关两种形式,只要犯人最终开和关的总次数是奇数就好;例如3 1开3关 ,开关总和为偶数; 例如4 1开2关4开,开关总和为奇数  其实就是看一个数是否有奇数个因子;

    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    
    int solve(int x)
    {
        int cnt=0;
        for(int i=1; i<=x; i++)
        {
            if(x%i==0)
                cnt++;
        }
        if(cnt%2==0)
            return 0;
        else
            return 1;
    }
    int main()
    {
        int t, n;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d", &n);
            int ans=0;
            for(int i=1; i<=n; i++)
            {
               if(solve(i))
                ans++;
            }
            printf("%d
    ", ans);
        }
        return 0;
    }

    第三种:是看别人才知道的,真的是世界之大无奇不有;

    原理是:只有完全平方数才有奇数个因子,例如3, 9,所以只需要求出n以内的完全平方数的个数即可;

    n以内的 完全平方数的个数=sqrt(n);

    #include<cstdio>
    #include<cmath>
    int main()
    {
        int t,n;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            printf("%d
    ",(int)sqrt(n));
        }
        return 0;
    }
    

      

  • 相关阅读:
    es6作用域
    es6函数的扩展
    input输入框ios上光标与placeholder、value不能对齐居中
    移动端input常用样式
    webpack安装遇到的坑
    错误类型
    滚动超出一定高度后,导航栏吸顶
    表单change()事件
    第二周学习进度
    第一周学习进度
  • 原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4743478.html
Copyright © 2011-2022 走看看