zoukankan      html  css  js  c++  java
  • ZOJ Problem Set

    zju对时间要求比较高,这就要求我们不能简单地暴力求解(三个循环搞定),就要换个思路:因为在循环时,已知a,确定b,c,d,在外重两层循环中已经给定了b和c,我们就不用遍历d,我们可以利用d^3=a^3-b^3-c^3来判断这个d。

    看代码:

    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
        for(int n=2;n<=200;++n)
        {
            int a[200],b[200],c[200],count=0,i,flag=0;
            double result=pow(n,3);
            
            for(i=2;i<n;i++)
            {
                int ai= i*i*i;
                for(int j=i+1;j<n;j++)
                {
                    int bj= j*j*j;
                    if(ai+bj>result) break;
                    
                    double t=result-ai-bj;
                    double ck=pow(t,1.0/3.0);
                    
                    int val; 
                    int v = (int)ck;
                    bool ans = false;
                    if(v*v*v + bj + ai == n*n*n){
                        ans = true;
                        val = v;
                    }
                    if((v-1)*(v-1)*(v-1) + bj + ai == n*n*n){
                        val = v-1;
                        ans = true;
                    }
                    if((v+1)*(v+1)*(v+1) + bj + ai == n*n*n){
                        val = v+1;
                        ans = true;
                    }
    
    
                    if(ans && val>1 && val> (i<j?j:i))
                    {
                        a[count]=i;
                        b[count]=j;
                        c[count++]=val;
                        flag=1;        
                    }
                }
            }
    
    
            if(flag)
            {
                for(i=0;i<count;i++)
                    printf("Cube = %d, Triple = (%d,%d,%d)
    ",n,a[i],b[i],c[i]);
            }
    
        }
    
        return 0;
    }

    这里存在一个比较有争议的话题,就是如何判断一个double为一个整数,经过跟实验室同学来回实验,提炼出一个在c/c++中可以判断的方法:

    bool isInt(double a)
    {
        int aInt=int(a);
        if(aInt+1==a||aInt-1==a||aInt==a)
            return true;
        else
            return false;
                  
    }

    在利用了pow函数时,其返回值是double类型,这个函数是可以判断其是否为整数,其他情况有待实验

    另外:给自己的提醒,三目运算符放在判断语句中一定要加括号,要不会有错误

  • 相关阅读:
    c++错误崩溃3
    c++崩溃错误2
    c++多线程崩溃错误1
    MySQL UNSIGNED
    2PC和3PC
    proxy-target-class="false"与proxy-target-class="true"区别
    Spring MVC processing flow
    Spring中自动装配的模式
    Spring中BeanFactory和ApplicationContext的区别
    什么是Spring
  • 原文地址:https://www.cnblogs.com/xlturing/p/3344802.html
Copyright © 2011-2022 走看看