HDU-6222 Heron and His Triangle(找规律,大数)

26 篇文章 0 订阅

E - E

Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Submit Status Practice HDU 6222

Description

A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integers t−1, t, t+ 1 and thatits area is an integer. Now, for given n you need to find a Heron’s triangle associated with the smallest t bigger 
than or equal to n.

Input

The input contains multiple test cases. The first line of a multiple input is an integer T (1 ≤ T ≤ 30000) followedby T lines. Each line contains an integer N (1 ≤ N ≤ 10^30). 

 

Output

For each test case, output the smallest t in a line. If the Heron’s triangle required does not exist, output -1.

 

Sample Input

 

4 1 2 3 4

 

Sample Output

 

4 4 4 4

 

先打表找下规律,得到数字,规律还是容易发现的:a[n] = 4*a[n-1] - a[n-2],

但就是不好写对吧!!数字太大了,然后我开开心心的用python写完准备提交的时候发现不能用python交.....几乎要被队友打死,然后就换了java,写的特别坎坷,百度了很多用法...很多都忘记掉了,哎,大数运算常常会用到java,python,要好好整理一下(不能再被队友打了!

【通过代码】

import java.math.*;  
import java.util.*;  
import java.io.*;  
  
public class Main  
{     
    public static void main(String[] args)  
    {  
        Scanner cin=new Scanner(new BufferedInputStream(System.in));  
        BigInteger res[] = new BigInteger[100];  
        res[0] = BigInteger.valueOf(4L);  
        res[1] = BigInteger.valueOf(14L);  
        for (int i = 2;i < 100;i++) {  
            res[i] = res[i-1].multiply(new BigInteger("4")).subtract(res[i-2]);  
        }  
        while (cin.hasNext()) {  
            int t = cin.nextInt();  
            for (int ca = 1;ca <= t;ca++) {  
                BigInteger n = cin.nextBigInteger();  
                int i = 0;  
                for (i = 0;i < 100;i++) {  
                    if (n.compareTo(res[i]) != 1) break;  
                }  
                System.out.println(res[i]);  
            }  
        }  
        cin.close();  
    }  
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值