uva 10183 uva 10519 uva 10516(java 大叔)

10183:

题意:

求a,b之间有多少个fib数。


大牛java代码 留着备用:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        BigInteger[] f = new BigInteger[600];
        f[0] = new BigInteger("1");
        f[1] = new BigInteger("2");
        for(int i = 2; i < 600; i ++)
            f[i] = f[i - 1].add(f[i - 2]);
        while(true)
        {
            BigInteger a, b;
            int res = 0;
            a = cin.nextBigInteger();
            b = cin.nextBigInteger();
            if(a.compareTo(BigInteger.ZERO) == 0 && b.compareTo(BigInteger.ZERO) == 0)
                break;
            for(int i = 0; i < 600; i ++)
                if(f[i].compareTo(a) != -1 && f[i].compareTo(b) != 1)
                    res ++;
            System.out.println(res);
        }
    }
}


10519:

题意:

问割圆割成几个面。


解析:

第n个圆与前面的n - 1个圆相交,多出 2 * ( n - 1)个面。

f(n) =  f(n - 1)+ 2 * (n - 1),f(0) = 1

往下递推,f(n) = n * n - n + 2


代码:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        BigInteger n;
        while(cin.hasNext())
        {
            n = cin.nextBigInteger();
            if(n.equals(BigInteger.valueOf(0)))
                System.out.println("1");
            else
            {
                n = n.multiply(n).add(n.negate()).add(BigInteger.valueOf(2));
                System.out.println(n);
            }
        }
    }
}


10516:

解析:

满K叉树的前i层的不同的树的数量为:f[i-1]^K + 1


代码:

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        for(;;)
        {
            int n = cin.nextInt();
            int d = cin.nextInt();
            if(n == 0 && d == 0)
                break;
            BigInteger[] f = new BigInteger[20];
            f[0] = new BigInteger("1");
            for(int i = 1; i <= d; i ++)
            {
                f[i] = new BigInteger("1");
                for(int j = 0; j < n; j ++)
                    f[i] = f[i].multiply(f[i - 1]);
                f[i] = f[i].add(BigInteger.ONE);
            }
            if(d == 0)
                System.out.println(n + " " + d + " " + "1");
            else
                System.out.println(n + " " + d + " " + f[d].add(f[d - 1].negate()));
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值