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

歡迎訪問 生活随笔!

生活随笔

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

java

第五届省赛(软件类)真题----Java大学B组答案及解析

發布時間:2025/3/15 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第五届省赛(软件类)真题----Java大学B组答案及解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第五屆省賽(軟件類)真題—-Java大學B組答案及解析

  • 正則切分
  • 調和級數
  • n的n次冪
  • 七對數字
  • 勾股定理
  • 九階數獨
  • G將軍
  • 一、正則切分

    java中提供了對正則表達式的支持。
    有的時候,恰當地使用正則,可以讓我們的工作事半功倍!
    如下代碼用來檢驗一個四則運算式中數據項的數目,請填寫劃線部分缺少的代碼。
    注意:只填寫缺少代碼,不要寫任何多余內容,例如,已有的雙引號。

    public class A {public static int f(String s){return s.split("______________").length;}public static void main(String[] args){System.out.println(f("12+35*5-2*18/9-3")); //7System.out.println(f("354*12+3-14/7*6")); //6} }

    答案: [-+*/]


    二、調和級數

    1/1 + 1/2 + 1/3 + 1/4 + … 在數學上稱為調和級數。
    它是發散的,也就是說,只要加上足夠多的項,就可以得到任意大的數字。
    但是,它發散的很慢:
    前1項和達到 1.0
    前4項和才超過 2.0
    前83項的和才超過 5.0

    那么,請你計算一下,要加多少項,才能使得和達到或超過 15.0 呢?
    請填寫這個整數。
    注意:只需要填寫一個整數,不要填寫任何多余的內容。比如說明文字。

    答案:1835421

    public class Main {public static void main(String[] args){double sum = 0.0;for (int i = 1; i < 10000000; i++) {sum += 1.0/i;if (sum >= 15.0) {System.out.println(i);break;}}} }

    三、n的n次冪

    如果x的x次冪結果為10(參見【圖1.png】),你能計算出x的近似值嗎?
    顯然,這個值是介于2和3之間的一個數字。
    請把x的值計算到小數后6位(四舍五入),并填寫這個小數值。
    注意:只填寫一個小數,不要寫任何多余的符號或說明。

    答案:3.162278

    public class Main {public static void main(String[] args) {System.out.println(sqrt(10));}/*** 牛頓迭代法開平方* */public static double sqrt(double c){if(c < 0){return Double.NaN;}double err = 1e-15;double t = c;while(Math.abs(t - c/t) > err*t){t = (c/t + t)/2.0;}return t;} }

    四、7對數組★

    今有7對數字:兩個1,兩個2,兩個3,…兩個7,把它們排成一行。
    要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是一個符合要求的排列:

    17126425374635

    當然,如果把它倒過來,也是符合要求的。
    請你找出另一種符合要求的排列法,并且這個排列法是以74開頭的。
    注意:只填寫這個14位的整數,不能填寫任何多余的內容,比如說明注釋等。

    答案:74151643752362

    public class Main {public static int dfs(int[] a, int n) {if(n == 4) {n++;}if(n > 6) {return 1;}for(int i = 3; i <= 14; i++) {if(i == 7 || i == 9) {continue;}if(i+n+1 <= 14 && a[i] == 0 && a[i+n+1] == 0) {a[i] = a[i+n+1] = n;if(dfs(a, n+1) != 0) {return 1;}/*回溯*/a[i] = a[i+n+1] = 0;}}return 0;}public static void main(String[] args) {int[] a = new int[]{0,7,4,0,0,0,0,4,0,7,0,0,0,0,0};dfs(a, 1);for(int i = 1; i <= 14; i++) {System.out.print(a[i]);}} }

    五、勾股定理

    勾股定理,西方稱為畢達哥拉斯定理,它所對應的三角形現在稱為:直角三角形。
    已知直角三角形的斜邊是某個整數,并且要求另外兩條邊也必須是整數。
    求滿足這個條件的不同直角三角形的個數。

    【數據格式】
    輸入一個整數 n (0n<10000000) 表示直角三角形斜邊的長度。
    要求輸出一個整數,表示滿足條件的直角三角形個數。

    例如,輸入:
    5
    程序應該輸出:
    1

    再例如,輸入:
    100
    程序應該輸出:
    2

    再例如,輸入:
    3
    程序應該輸出:
    0

    資源約定:
    峰值內存消耗(含虛擬機) < 256M
    CPU消耗 < 1000ms

    請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多余內容。
    所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
    注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
    注意:主類的名字必須是:Main,否則按無效代碼處理。

    import java.util.Scanner;public class Main {static int[] s;public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();int cnt = 0;for (int i = 1; i < Math.sqrt(Math.pow(n, 2)/2); i++) {int j = (int) Math.sqrt(Math.pow(n, 2) - Math.pow(i, 2));if (Math.pow(i, 2) + Math.pow(j, 2) == Math.pow(n, 2)) {cnt++;}}System.out.println(cnt);} }

    六、九階數獨

    你一定聽說過“數獨”游戲。
    如【圖1.png】,玩家需要根據9×9盤面上的已知數字,推理出所有剩余空格的數字,并滿足每一行、每一列、每一個同色九宮內的數字均含1-9,不重復。
    數獨的答案都是唯一的,所以,多個解也稱為無解。
    本圖的數字據說是芬蘭數學家花了3個月的時間設計出來的較難的題目。但對會使用計算機編程的你來說,恐怕易如反掌了。
    本題的要求就是輸入數獨題目,程序輸出數獨的唯一解。我們保證所有已知數據的格式都是合法的,并且題目有唯一的解。

    格式要求,輸入9行,每行9個字符,0代表未知,其它數字為已知。
    輸出9行,每行9個數字表示數獨的解。

    例如:
    輸入(即圖中題目):
    005300000
    800000020
    070010500
    400005300
    010070006
    003200080
    060500009
    004000030
    000009700

    程序應該輸出:
    145327698
    839654127
    672918543
    496185372
    218473956
    753296481
    367542819
    984761235
    521839764

    再例如,輸入:
    800000000
    003600000
    070090200
    050007000
    000045700
    000100030
    001000068
    008500010
    090000400

    程序應該輸出:
    812753649
    943682175
    675491283
    154237896
    369845721
    287169534
    521974368
    438526917
    796318452

    資源約定:
    峰值內存消耗(含虛擬機) < 256M
    CPU消耗 < 2000ms

    請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多余內容。
    所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
    注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
    注意:主類的名字必須是:Main,否則按無效代碼處理。

    import java.util.Scanner;public class Main {static String[][] a = new String[9][9];static String[] str = new String[9];public static void main(String args[]){//采用字符串存儲,每次sc.nextLine()輸入一行,通過split分隔后放入Scanner sc = new Scanner(System.in);for(int i = 0;i < 9;i++) {str[i] = sc.nextLine();a[i] = str[i].split("");}/*調用回溯*/backtrace(0,0);}static void backtrace(int x,int y){if(x==9) {for(int i=0;i<9;i++) {for(int j=0;j<9;j++) {System.out.print(a[i][j]);}System.out.println();}} else {if(a[x][y].equals("0")){for(int i=1;i<=9;i++){a[x][y]=""+i;if(check(x,y)) {if(y+1< 9) {//不該換行backtrace(x,y+1);} else {backtrace(x+1,0);//換行,x+1,y=0;}}a[x][y]="0";}} else {if(y+1< 9) {backtrace(x,y+1);} else {backtrace(x+1,0);}}}}static boolean check(int x,int y){//列有重復for(int i=0;i<9;i++) {if(a[x][i].equals(a[x][y])&&i!=y) {return false;}}//行有重復for(int i=0;i<9;i++) {if(a[i][y].equals(a[x][y])&&i!=x) {return false;}}//九宮格有重復int row=(x/3)*3;int col=(y/3)*3;for(int i=row;i<row+3;i++) {for(int j=col;j<col+3;j++) {if(a[i][j].equals(a[x][y])&&(i!=x||j!=y)) {return false;}}}return true;} }

    七、G將軍★

    G將軍有一支訓練有素的軍隊,這個軍隊除開G將軍外,每名士兵都有一個直接上級(可能是其他士兵,也可能是G將軍)。現在G將軍將接受一個特別的任務,需要派遣一部分士兵(至少一個)組成一個敢死隊,為了增加敢死隊隊員的獨立性,要求如果一名士兵在敢死隊中,他的直接上級不能在敢死隊中。
    請問,G將軍有多少種派出敢死隊的方法。注意,G將軍也可以作為一個士兵進入敢死隊。
    輸入格式
    輸入的第一行包含一個整數n,表示包括G將軍在內的軍隊的人數。軍隊的士兵從1至n編號,G將軍編號為1。
    接下來n-1個數,分別表示編號為2, 3, …, n的士兵的直接上級編號,編號i的士兵的直接上級的編號小于i。
    輸出格式
    輸出一個整數,表示派出敢死隊的方案數。由于數目可能很大,你只需要輸出這個數除10007的余數即可。

    樣例輸入1
    3
    1 1
    樣例輸出1
    4
    樣例說明
    這四種方式分別是:
    1. 選1;
    2. 選2;
    3. 選3;
    4. 選2, 3。
    樣例輸入2
    7
    1 1 2 2 3 3
    樣例輸出2
    40

    數據規模與約定
    對于20%的數據,n ≤ 20;
    對于40%的數據,n ≤ 100;
    對于100%的數據,1 ≤ n ≤ 100000。

    資源約定:
    峰值內存消耗(含虛擬機) < 256M
    CPU消耗 < 2000ms

    請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多余內容。
    所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
    注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
    注意:主類的名字必須是:Main,否則按無效代碼處理。

    解析:樹形DP,可以參考Anniversary party 這個題目

    import java.util.ArrayList; import java.util.Scanner;public class Main {static ArrayList<Integer>[] list;static long[][] dp;public static void main(String[] args) {Scanner input = new Scanner(System.in);int n = input.nextInt();list = new ArrayList[n + 1];for (int i = 1; i <= n; i++) {list[i] = new ArrayList<Integer>();}for (int i = 2; i <= n; i++) {int father = input.nextInt();list[father].add(i);}dp = new long[n + 1][2];dfs(1);System.out.println((dp[1][0] + dp[1][1] - 1) % 10007);}private static void dfs(int u) {/*** 下面兩個dp[][]分別表示 u去 和 u不去* */dp[u][0] = 1;dp[u][1] = 1;/*** 當前節點下的子節點數目* */for (int i = 0; i < list[u].size(); i++) {int v = list[u].get(i);dfs(v);dp[u][0] = dp[u][0] * (dp[v][0] + dp[v][1]) % 10007;dp[u][1] = dp[u][1] * dp[v][0] % 10007;}} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的第五届省赛(软件类)真题----Java大学B组答案及解析的全部內容,希望文章能夠幫你解決所遇到的問題。

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