牛客网21天刷题之8.1and9.1

8.1数字比较

题目描述:

牛牛很喜欢对数字进行比较,但是对于3 > 2这种非常睿智的比较不感兴趣。上了高中之后,学习了数字的幂,他十分喜欢这种数字表示方法,比如xy。

由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较xy和yx的大小,如果前者大于后者,输出">",小于则输出"<",等于则输出"="。

输入描述:

两个数字x和y。

满足1 <= x,y <= 10^9

输出描述:

一个字符,">","<"或者"="。

示例1

输入:

2 2

输出

=

示例2

输入:

2 4

输出

=

代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[]args){
        Scanner input = new Scanner(System.in);
        int x=input.nextInt();
        int y = input.nextInt();
        double a1,a2;
        //同时乘log10,可以把次方挪下来,这样数就会比较了
        a1=y*Math.log10(x);
        a2=x*Math.log10(y);
        if(a1>a2)
            System.out.println(">");
        else if(a1==a2)
            System.out.println("=");
        else if(a1<a2)
             System.out.println("<");
    }
}

核心思想是由于10的9次方过大,所以要把x^y>y^x次方的比较更改为ylogx>xlogy的问题,即可使计算机可以存储下数值。

9.1童年生活二三事

题目描述

NowCoder小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。
但年幼的他一次只能走上一阶或者一下子蹦上两阶。
现在一共有N阶台阶,请你计算一下NowCoder从第0阶到第N阶共有几种走法。

输入描述

输入包括多组数据。每组数据包括一个整数n, (1≤n≤90)。

输出描述

对应每个输入包括一个输出。
为redraiment到达第n阶不同走法的数量。

示例1

输入

1

2

输出

1

2

先贴出代码

// write your code here
import java.util.Scanner;
// 使用斐波那契数列
//根据规律可以找到F(1)=1,F(2)=2
// F(3)=3,F(4)=5
public class Main{
    public static void main(String[]args){
        Scanner input = new Scanner(System.in);
        
        while(input.hasNextInt())
              {
        int n=input.nextInt(); 
        if(n==1)
        {
            System.out.println(1);
        }
        else if(n==2)
            System.out.println(2);
        else if(n>=3&&n<=90)
        {
            long sum=0;
            long i1=1;
            long i2=2;
            for(int i=3;i<=n;i++)
            {
                sum=i1+i2;
                i1=i2;
                i2=sum;
            }
            System.out.println(sum);
        }
        }
    }
}

这题比较有趣,可以找下规律,f(1)=1(0-1),f(2)=2(0-2,0-1-1),f(3)=3(0-2-1,0-1-2,0-1-1-1),f(4)=5(0-1-1-1-1,0-2-2,0-1-1-2,0-2-1-1,0-1-2-1)

可以看出这是一个斐波那契数列,刚开始是用int传递数据,发现debug时有负值意识到可能会超出范围,所以改为long,解决问题。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值