第四届蓝桥杯省赛javaB组试题解析
生活随笔
收集整理的這篇文章主要介紹了
第四届蓝桥杯省赛javaB组试题解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、標題: 世紀末的星期曾有邪教稱1999年12月31日是世界末日。當然該謠言已經不攻自破。還有人稱今后的某個世紀末的12月31日,如果是星期一則會....有趣的是,任何一個世紀末的年份的12月31日都不可能是星期一!!于是,“謠言制造商”又修改為星期日......1999年的12月31日是星期五,請問:未來哪一個離我們最近的一個世紀末年(即xx99年)的12月31日正好是星期天(即星期日)?請回答該年份(只寫這個4位整數,不要寫12月31等多余信息)
import java.util.Date;public class Main {public static void main(String[] args) {for (int i = 1999;; i += 100) {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date(i - 1900, 11, 31));if (calendar.get(Calendar.DAY_OF_WEEK) - 1 == 0) {System.out.println(i);return;}}}}
2、標題: 馬虎的算式小明是個急性子,上小學的時候經常把老師寫在黑板上的題目抄錯了。有一次,老師出的題目是:36 x 495 = ?他卻給抄成了:396 x 45 = ?但結果卻很戲劇性,他的答案竟然是對的!!因為 36 * 495 = 396 * 45 = 17820類似這樣的巧合情況可能還有很多,比如:27 * 594 = 297 * 54 假設 a b c d e 代表1~9不同的5個數字(注意是各不相同的數字,且不含0)能滿足形如: ab * cde = adb * ce 這樣的算式一共有多少種呢?
import java.util.Calendar;public class Main {static int kinds = 0;static int a[] = new int[6];static boolean vis[] = new boolean[10];static void check(int a[]) {int num1 = a[1] * 10 + a[2];int num2 = a[3] * 100 + a[4] * 10 + a[5];int num3 = a[1] * 100 + a[4] * 10 + a[2];int num4 = a[3] * 10 + a[5];if (num1 * num2 == num3 * num4)kinds++;}static void dfs(int start, int n) {if (start == 6) {check(a);} else {for (int i = 1; i < n; i++) {if (vis[i])continue;a[start] = i;vis[i] = true;dfs(start + 1, n);vis[i] = false;}}}public static void main(String[] args) {dfs(1, 10);System.out.println(kinds);}}
3、標題: 振興中華
小明參加了學校的趣味運動會,其中的一個項目是:跳格子。地上畫著一些格子,每個格子里寫一個字,如下所示:(也可參見p1.jpg)從我做起振我做起振興做起振興中起振興中華
比賽時,先站在左上角的寫著“從”字的格子里,可以橫向或縱向跳到相鄰的格子里,但不能跳到對角的格子或其它位置。一直要跳到“華”字結束。
要求跳過的路線剛好構成“從我做起振興中華”這句話。 請你幫助小明算一算他一共有多少種可能的跳躍路線呢?
class Node {int x, y;public Node(int xx, int yy) {x = xx;y = yy;}}public class Main {static int kinds = 0, dir[][] = { { 0, 1 }, { 1, 0 } };static Node aim[] = new Node[8];static boolean vis[][] = new boolean[4][5];static void dfs(int start, int n) {if (start == n)kinds++;else {Node pre = aim[start];for (int i = 0; i < 2; i++) {int x = pre.x + dir[i][0];int y = pre.y + dir[i][1];if (x < 4 && y < 5 && !vis[x][y]) {vis[x][y] = true;aim[start + 1] = new Node(x, y);dfs(start + 1, n);vis[x][y] = false;}}}}public static void main(String[] args) {aim[0] = new Node(0, 0);dfs(0, 7);System.out.println(kinds);}}
4、標題: 黃金連分數黃金分割數0.61803... 是個無理數,這個常數十分重要,在許多工程問題中會出現。有時需要把這個數字求得很精確。對于某些精密工程,常數的精度很重要。也許你聽說過哈勃太空望遠鏡,它首次升空后就發現了一處人工加工錯誤,對那樣一個龐然大物,其實只是鏡面加工時有比頭發絲還細許多倍的一處錯誤而已,卻使它成了“近視眼”!!言歸正傳,我們如何求得黃金分割數的盡可能精確的值呢?有許多方法。比較簡單的一種是用連分數:
1 黃金數 = --------------------- 1 1 + ----------------- 1 1 +
------------- 1 1 + --------- 1 + ... 這個連分數計算的“層數”越多,它的值越接近黃金分割數。請你利用這一特性,求出黃金分割數的足夠精確值,要求四舍五入到小數點后100位。小數點后3位的值為:0.618 小數點后4位的值為:0.6180 小數點后5位的值為:0.61803 小數點后7位的值為:0.6180340 (注意尾部的0,不能忽略)你的任務是:寫出精確到小數點后100位精度的黃金分割值。注意:尾數的四舍五入! 尾數是0也要保留!
import java.math.BigDecimal;public class Main {public static void main(String[] args) {BigDecimal one, ans;ans = one = BigDecimal.ONE;for (int i = 0; i < 1000; i++) {ans = one.add(ans);ans = one.divide(ans, 200, BigDecimal.ROUND_HALF_UP);System.out.println(ans);}System.out.println(ans.setScale(100, BigDecimal.ROUND_HALF_UP));}}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的第四届蓝桥杯省赛javaB组试题解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五届蓝桥杯省赛javaB组试题解析
- 下一篇: BFS算法详解