日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

你知道考的是平方数吗(记洛谷P1876题RE+WA的经历,Java语言描述)

發布時間:2025/3/15 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你知道考的是平方数吗(记洛谷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语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。