你知道考的是平方数吗(记洛谷P1876题RE+WA的经历,Java语言描述)
生活随笔
收集整理的這篇文章主要介紹了
你知道考的是平方数吗(记洛谷P1876题RE+WA的经历,Java语言描述)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
這題用Java,自己作吧你,好好的C不用……
題目要求
P1876題目鏈接
分析
這個題其實你如果正常做是沒法做的,因為2^40誒,1T吧,偶買噶……
其實就是一個求平方數的問題。
為啥是平方數呢?下面是我截的圖,來自洛谷一份題解,可供參考:
就算知道了,面臨如此大數,在Java下就很難受(沒longlong,BigInteger不好使,數組不好使,索引什么的還得long轉int……極其麻煩就是了)
其實下面的全部錯誤基本是語法問題或者邊界問題,很難搞……
第一次提交——WA+RE
import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Long num = scanner.nextLong();List<Integer> arr = new ArrayList<>(10000000);Long i;for (i = (long)0; i*i < num; i++) {arr.add(i.intValue());}for (Long j = (long)0; j < num-1; j++) {System.out.print(arr.get(j.intValue()) + " ");}System.out.println(arr.get(i.intValue()-1));scanner.close();} }
這是自己失敗多次編出的代碼,然而ArrayList極限長度是Integer.MAX_VALUE,這明顯會爆掉ArrayList誒……(具體知識,自己查ArrayList源碼即可)
第二次提交以后——WA++
import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Long num = scanner.nextLong();int sqrtResult = (int)Math.sqrt(num);List<Integer> arr = new ArrayList<>(10000000);for (int i = 0; i < sqrtResult; i++) {arr.add(i);}for (int j = 0; j < sqrtResult-1; j++) {System.out.print(arr.get(j) + " ");}System.out.println(arr.get(sqrtResult-1));scanner.close();} }Code指示從0開始,答案應該從1開始,必然WA掉……
import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);Long num = scanner.nextLong();int sqrtResult = (int)Math.sqrt(num);List<Integer> arr = new ArrayList<>(sqrtResult);for (int i = 1; i <= sqrtResult; i++) {arr.add(i);}for (int j = 0; j < sqrtResult-1; j++) {System.out.print(arr.get(j) + " ");}System.out.println(arr.get(sqrtResult-1));scanner.close();} }
這不,這會兒還沒意識到ArrayList爆掉了的問題,emmm當然數據都錯了,此時未測出RE……
我就覺得自己傻,這int能行嗎……心里沒數誒……
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num = scanner.nextLong();int sqrtResult = (int)Math.sqrt(num);for (int i = 1; i <= sqrtResult; i++) {System.out.print(i + " ");}scanner.close();} } import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num = scanner.nextLong();int sqrtResult = (int)Math.sqrt(num);for (int i = 1; i < sqrtResult; i++) {System.out.print(i + " ");}System.out.print(sqrtResult);scanner.close();} } import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num = scanner.nextLong();int sqrtResult = (int)Math.sqrt(num);for (long i = 1; i < sqrtResult; i++) {System.out.print(i*i + " ");}System.out.print(sqrtResult);scanner.close();} }上面三個各種錯,無言以對……
第N提交——AC
做了很多改動,最后通過這種方式結束了這個破題……
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long num = scanner.nextLong();long sqrtResult = (long)Math.sqrt(num);for (long i = 1; i < sqrtResult; i++) {System.out.print(i*i + " ");}System.out.print(sqrtResult*sqrtResult);scanner.close();} }反思
這個題其實在知道平方數以后就不難了,主要是處理long那些很煩人。
還是覺得自己很多語法點用在這種地方顯得不熟練、不扎實,這次又買了教訓,今后繼續努力吧!
總結
以上是生活随笔為你收集整理的你知道考的是平方数吗(记洛谷P1876题RE+WA的经历,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java】扑克牌の顺子Judge
- 下一篇: 秘钥协议及新兴密码学方向【7】