計蒜客 Half-consecutive Numbers 暴力打表找規律
阿新 • • 發佈:2018-12-24
The numbers 1, 3, 6, 10, 15, 21, 28, 36, 45 and ti=21i(i+1), are called half-consecutive.
For given N, find the smallest r which is no smaller than N such that tr is square.
Input Format
The input contains multiple test cases.
The first line of a multiple input is an integer T followed
by T input
lines.
Each line contains an integer N(1≤N≤1016).
Output Format
For each test case, output the case number first.
Then for given N, output the smallest r.
If this half-consecutive number does not exist, output −1.
樣例輸入
4 1 2 9 50
樣例輸出
Case #1: 1 Case #2: 8 Case #3: 49 Case #4: 288
題目來源
打表找規律
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.math.BigInteger; import java.util.HashSet; import java.util.Set; import java.util.StringTokenizer; public class Main { public static void main(String[] args) { new Task().solve(); } } class Task { InputReader in = new InputReader(System.in) ; PrintWriter out = new PrintWriter(System.out) ; void solve(){ /*for(long i = 1 ; i <= 100000000L ; i++){ long x = i*(i+1)/2 ; long y = (long)Math.sqrt(x + 0.5) ; if(y * y == x){ System.out.println(i + " " + x + " " + y) ; } }*/ long[] a = new long[26] ; long[] b = new long[26] ; long[] r = new long[26] ; a[0] = 1 ; b[0] = 1 ; r[0] = 1 ; for(int i = 1 ; i < 26 ; i++){ a[i] = a[i-1] + b[i-1] ; b[i] = a[i-1] + a[i] ; r[i] = b[i] * b[i] + ((i%2==0) ? 0 : -1) ; } int cas = 1 ; int t = in.nextInt() ; while(t-- > 0){ long n = in.nextLong() ; for(int i = 0 ; i < 26 ; i++){ if(r[i] >= n){ out.println("Case #" + (cas++) + ": " + r[i]) ; break ; } } } out.flush() ; } } class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = new StringTokenizer(""); } private void eat(String s) { tokenizer = new StringTokenizer(s); } public String nextLine() { try { return reader.readLine(); } catch (Exception e) { return null; } } public boolean hasNext() { while (!tokenizer.hasMoreTokens()) { String s = nextLine(); if (s == null) return false; eat(s); } return true; } public String next() { hasNext(); return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public int[] nextInts(int n) { int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = nextInt(); } return nums; } public long nextLong() { return Long.parseLong(next()); } public double nextDouble() { return Double.parseDouble(next()); } public BigInteger nextBigInteger() { return new BigInteger(next()); } }