本文主要是介绍计蒜客 Half-consecutive Numbers 暴力打表找规律,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
题目来源
2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛
打表找规律
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()); } }
这篇关于计蒜客 Half-consecutive Numbers 暴力打表找规律的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!