练习(十)

1、Fibonacci数列 | 时间限制:1秒 | 内存限制:32768K

【题目描述】

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

【思路】

(1)对当前数求最少多少步可以变为Fibonacci数,要找到它前后的两个Fibonacci数,将该数与其前后的两个Fibonacci数进行对比,取其中较小的即可

(2)详细步骤:

①先列出Fibonacci数列的前三项,若当前数n大于第三项,就不断进入循环,直到n小于第三项,此时,n在fib1和fib2之间
②分别计算n与fib1和fib2的距离,输出较小的一个值即可

【代码】

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int fib1 = 0;
            int fib2 = 1;
            int fibn = 1;
            while (n>fibn){
                fibn = fib1+fib2;
                fib1 = fib2;
                fib2 = fibn;
            }
            int num1 = fib2-n;
            int num2 = n-fib1;
            System.out.println( num1>num2?num2:num1);
        }
    }
}

2、标题:机器人走方格I | 时间限制:3秒 | 内存限制:32768K | 语言限制:[Python, C++, C#, Java]

【题目描述】

有一个XxY的网格,一个机器人只能走格点且只能向右或向下走,要从左上角走到右下角。请设计一个算法,计算机器人有多少种走法。

给定两个正整数int x,int y,请返回机器人的走法数目。保证x+y小于等于12。

【思路】

(1)采用递归的方法

(2)每次机器人只能跨越一个格点,即当x = 1或者y = 1时,机器人只有一种走法(跳出递归的条件)

(3)递归计算机器人的走法

【代码】

public class Robot {
    public int countWays(int x, int y) {
        // write code here
        if(x == 1 || y == 1){
            return 1;
        }
        return countWays(x-1,y)+countWays(x,y-1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值