zoukankan      html  css  js  c++  java
  • 星际穿越(网易)

    题目描述

    航天飞行器是一项复杂而又精密的仪器,飞行器的损耗主要集中在发射和降落的过程,科学家根据实验数据估计,如果在发射过程中,产生了 x 程度的损耗,那么在降落的过程中就会产生 x2 程度的损耗,如果飞船的总损耗超过了它的耐久度,飞行器就会爆炸坠毁。问一艘耐久度为 h 的飞行器,假设在飞行过程中不产生损耗,那么为了保证其可以安全的到达目的地,只考虑整数解,至多发射过程中可以承受多少程度的损耗?

    输入描述:

    每个输入包含一个测试用例。每个测试用例包含一行一个整数 h (1 <= h <= 10^18)。

    输出描述:

    输出一行一个整数表示结果。
    示例1

    输入

    10

    输出

    2

    这个题,题意是比较简单的,就是输入一个h,然后自己找到一个x+x*x<=h中x的最大值。x(x+1)<=h。

    这里要注意,输入是个long型的,所以使用nextLong()读取。

    1、可以直接用求根公式x*x+x-h=0.求出来的根是整数,则就是,不是整数,直接转成整数即可,也就是最大的那个了。

    2、先求出k=sqrt(h)。如果k(k+1)<=h,那么就是k,否则就是k-1,因为(k-1)*k<h肯定成立。

    3、遍历查找,符合x=i时,x(x+1)<=h,x=i+1时,x(x+1)>h,则i就是该值。此时如果从0开始遍历,会超时,应该从sqrt(h)往前遍历。

    import java.util.*;
    public class Main{
        public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            while(sc.hasNext()){
                long h=sc.nextLong();
              /*  for(long i=(int)Math.sqrt(h);i>=0;i--){
                    if((i+i*i)<=h&&(i+1+(i+1)*(i+1))>h){
                        System.out.println(i);
                        break;
                    }
                        
                    
                }
                */
                //k是h的开根号,所以k(k-1)肯定是小于h的,如果k(k+1)<=h,那么这个k就是所求的解
                long k=(int)Math.sqrt(h);
                if(k*(k+1)<=h) {
                    System.out.println(k);
                }else
                    System.out.println(k-1);
            }
        }
    }
  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8313152.html
Copyright © 2011-2022 走看看