中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

重慶建網(wǎng)站推廣價(jià)格創(chuàng)建一個(gè)網(wǎng)站

重慶建網(wǎng)站推廣價(jià)格,創(chuàng)建一個(gè)網(wǎng)站,小程序制作方法,評(píng)論凡科網(wǎng)站建設(shè)怎么樣目錄 寫在前面注意事項(xiàng)數(shù)組、字符串處理BigInteger日期問題DFS 2013年真題Java B組世紀(jì)末的星期馬虎的算式振興中華黃金連分?jǐn)?shù)有理數(shù)類(填空題)三部排序(填空題)錯(cuò)誤票據(jù)幸運(yùn)數(shù)字帶分?jǐn)?shù)連號(hào)區(qū)間數(shù) 2014年真題藍(lán)橋杯Java B組03猜字…

目錄

  • 寫在前面
  • 注意事項(xiàng)
    • 數(shù)組、字符串處理
    • BigInteger
    • 日期問題
    • DFS
  • 2013年真題Java B組
    • 世紀(jì)末的星期
    • 馬虎的算式
    • 振興中華
    • 黃金連分?jǐn)?shù)
    • 有理數(shù)類(填空題)
    • 三部排序(填空題)
    • 錯(cuò)誤票據(jù)
    • 幸運(yùn)數(shù)字
    • 帶分?jǐn)?shù)
    • 連號(hào)區(qū)間數(shù)
  • 2014年真題藍(lán)橋杯Java B組
    • 03猜字母
    • 06奇怪的分式
    • 07撲克牌序列
    • 08分糖果
    • 09地宮取寶
    • 10矩陣翻硬幣
  • 2015年真題Java B組
    • 01三角形面積(結(jié)果填空3’)
    • 02立方變自身(結(jié)果填空5’)
    • 03三羊開泰(結(jié)果填空9’)
    • 04循環(huán)節(jié)長(zhǎng)度(代碼填空11’)
    • 05九數(shù)組分?jǐn)?shù)(代碼填空15’)
    • 06加法變乘法(結(jié)果填空17’)
    • 07牌型種數(shù)(結(jié)果填空21’)
    • 08飲料換購(gòu)(程序設(shè)計(jì)13’)
    • 09壘骰子(程序設(shè)計(jì)25’)
  • 2021年真題Java B組
    • 結(jié)果填空
    • 1.計(jì)算ASC碼(5’):
    • 2.卡片表示數(shù)字(5‘):
    • 3.直線(15’):
    • 4.貨物堆放(10‘):
    • **5.路徑(15’)(最短路徑問題)
    • 代碼編程
    • 6.時(shí)間顯示(15‘)
    • **7.最少砝碼(15’)
    • *8.楊輝三角(20')
    • *9.雙向排序(25’)==
    • **10.括號(hào)排序(25')
  • 2021年第二場(chǎng)Java B組
    • 質(zhì)因子與完全平方數(shù)
    • DFS(遞歸回溯)

寫在前面

藍(lán)橋杯整體而言難度并不大,我在考前很長(zhǎng)一段時(shí)間有堅(jiān)持刷力扣,順利省一,進(jìn)入國(guó)賽拿到國(guó)二。我主要使用的是Java語言,報(bào)名的是Java B組,以下是一些小TIPS。祝大家都能取得理想成績(jī)

  • JDK版本:Window->Preferences->Compiler
  • 自動(dòng)補(bǔ)全:Window->Preferences->Java->Editor->Content Assist:
    .ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz

注意事項(xiàng)

下面介紹的四個(gè)內(nèi)容是藍(lán)橋杯中常考的,包括數(shù)組、字符串的處理,BigInteger,日期問題,DFS

數(shù)組、字符串處理

  • 讀入大量數(shù)據(jù):Scanner sc = new Scanner (new BufferedInputStream(System.in))
    數(shù)組翻轉(zhuǎn):int[] intArray = { 1, 2, 3, 4, 5 };
    ArrayUtils.reverse(intArray);
    System.out.println(Arrays.toString(intArray));

  • 進(jìn)制轉(zhuǎn)換:Integer.valueOf(“str”,x); ///可以為任意進(jìn)制的字符串str轉(zhuǎn)換成x進(jìn)制的10進(jìn)制數(shù)
    String str1 = Integer.toHexString(x) ;
    String str2 = Integer.toOctalString(x) ; ///10進(jìn)制轉(zhuǎn)換成8進(jìn)制的字符串

  • 讀入String,存為char數(shù)組

    Scanner sc = new Scanner(System.in);
    String string=sc.next();
    string = String.valueOf(int a)
    char[]a=string.toCharArray();
    Character.isUpperCase(a[1]);
    a[1]>=‘0’;

  • 字符與數(shù)字轉(zhuǎn)換
    a.charAt(i)-‘a(chǎn)’->int
    (char)(‘a(chǎn)’+index)

  • 去重
    HashSet set=new HashSet();
    for(int j=i;j<a.length;j++) {
    set.add(a[j]);
    num+=set.size();
    }

BigInteger

浮點(diǎn)數(shù)的比較可以使用:BigDecimal.compareTo(f2) == 0

BigDecimal bigDecimal = new BigDecimal(12.52);BigInteger []aBigIntegers=new BigInteger[2030];aBigIntegers[0]=BigInteger.ZERO;aBigIntegers[1]=BigInteger.ONE;aBigIntegers[2]=BigInteger.ONE;for(int i=3;i<2030;i++) {aBigIntegers[i]=aBigIntegers[i-1].add(aBigIntegers[2]);}

日期問題

計(jì)算星期幾:

      Calendar anCalendar=Calendar.getInstance();anCalendar.set(2022, 3, 7);#月份從0開始System.out.println(anCalendar.get(Calendar.DAY_OF_WEEK) - 1);

日期格式化:

SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");Date dat1=format.parse("1921-7-23");int b=(int)dat1.getTime();

有年/月/日的,有采用月/日/年的,還有采用日/月/年的000

Scanner cin = new Scanner(System.in);String a[] = cin.next().split("/");String t[] = new String[3];t[0] = ((Integer.valueOf(a[0]) >= 60) ? "19" + a[0] : "20" + a[0]) + "-" + a[1] + "-" + a[2];t[1] = ((Integer.valueOf(a[2]) >= 60) ? "19" + a[2] : "20" + a[2]) + "-" + a[0] + "-" + a[1];t[2] = ((Integer.valueOf(a[2]) >= 60) ? "19" + a[2] : "20" + a[2]) + "-" + a[1] + "-" + a[0];SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");sf.setLenient(false);Set<String> s = new TreeSet<String>();for (String T : t) {try {sf.parse(T);} catch (ParseException e) {continue;}s.add(T);}for(String T:s)System.out.println(T);}

DFS

import java.io.BufferedInputStream;
import java.util.Scanner;public class _04試劑問題 {static int sum=0 ,cnt=Integer.MAX_VALUE;static int []arr=new int[15];public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner=new Scanner(new BufferedInputStream(System.in));for(int i=0;i<15;i++) {arr[i]=scanner.nextInt();sum+=arr[i];}dfs(0,0);System.out.println(cnt);}private static void dfs(int d,int v) {// TODO Auto-generated method stubif(d==15)cnt=Math.min(cnt, Math.abs(sum-v-v));else {dfs(d+1, v+arr[d]);dfs(d+1,v);}}}

2013年真題Java B組

世紀(jì)末的星期

1999年的12月31是周五,求最近的哪個(gè)99年12月31日是星期天?

  • 日期API-Calendar,1970年以后的可以用
public class _01世紀(jì)末的星期 {public static void main(String[] args) {// TODO Auto-generated method stubCalendar calendar= Calendar.getInstance();//獲取實(shí)例for(int year=1999;year<10000;year+=100) {calendar.set(Calendar.YEAR, year);calendar.set(Calendar.MONTH, 11);//設(shè)置12月calendar.set(Calendar.DAY_OF_MONTH, 31);if(calendar.get(Calendar.DAY_OF_WEEK)==1) {System.out.println(year);break;}}Calendar calendar2=Calendar.getInstance();calendar2.set(1999, 11, 31, 0, 0);if(calendar2.get(Calendar.DAY_OF_WEEK)==6) {System.out.println(1999);			}		}
}

馬虎的算式

滿足:abcde=adbce (abcde代表1-9的不同的五個(gè)數(shù)字)的算式一共有多少種?

  • 枚舉法解題,for循環(huán)嵌套if判斷為不等

振興中華

從我做起振興中華,有幾種路線?

  • dfs 遞歸 重復(fù) 變化 邊界
public class _03振興中華 {public static void main(String[] args) {// TODO Auto-generated method stubint ans=f(0,0);System.out.println(ans);}private static int f(int i,int j) {if(i==3||j==4) return 1;return f(i+1,j)+f(i,j+1);		}
}

黃金連分?jǐn)?shù)

保留100位小數(shù)

  • 前幾項(xiàng)尋找規(guī)律為斐波拉契數(shù)列相鄰兩項(xiàng)的除
  • double無法表示100位小數(shù),用BigInteger和BigDecimal
public class _04黃金連分?jǐn)?shù) {public static void main(String[] args) {// TODO Auto-generated method stubBigInteger a=BigInteger.ONE;BigInteger b=BigInteger.ONE;for(int i=3;i<10000;i++) {BigInteger t=b;b=a.add(b);a=t;}BigDecimal divide=new BigDecimal(a,110).divide(new BigDecimal(b,110),BigDecimal.ROUND_HALF_DOWN);System.out.println(divide.toPlainString().substring(0, 103));}
}

有理數(shù)類(填空題)

填空題:分?jǐn)?shù)加法的補(bǔ)充

  • static class
return new Rational(this.ra*x.rb+x.ra*this.rb, this.rb*x.rb);privata long gcd(long  a ,long b){if(b==0)  return a;return gcd(b, a%b);}   

三部排序(填空題)

填空題:整型數(shù)組中的數(shù)進(jìn)行分類排序,負(fù)數(shù)在左端,正數(shù)在右端,0在中間,一次完成

  • 快速排序
  p++int []arr= {1,2,3,4,5,6};Arrays.sort(arr);for(int i=0;i<arr.length;i++) {System.out.print(arr[i]+" ");}

錯(cuò)誤票據(jù)

ID連續(xù),開始的數(shù)字隨機(jī),一個(gè)ID重復(fù),一個(gè)ID斷號(hào)

輸入:行號(hào)+每行內(nèi)容不等的數(shù)據(jù)
2
5 6 8 11 9
10 12 9
輸出:斷號(hào)n,重復(fù)m
7 9

  • ArrayList是Java的鏈表類
  • list.add(“a”),list.add(2,“a”),list.get(i),list.remove(i),list.remove(“a”)
  • 對(duì)于輸入數(shù)據(jù)的處理scanner.nextLine(); //吃掉整數(shù)后面的換行符
  • if(list.get(i).equals(list.get(i-1))) //集合元素使用equals進(jìn)行比較
    b=list.get(i);
  • list.add(Integer.parseInt(split[j]));
public class _07 錯(cuò)誤票據(jù){public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner=new Scanner(System.in);ArrayList<Integer> list=new ArrayList<Integer>();int N=scanner.nextInt();scanner.nextLine(); //吃掉整數(shù)后面的換行符for(int i=0;i<N;i++) { //數(shù)據(jù)處理String line =scanner.nextLine();String[] splitStrings=line.split(" ");for(int j=0;j<splitStrings.length;j++) {list.add(Integer.parseInt(splitStrings[j]));}}		Collections.sort(list);int a=0,b=0; //局部變量for(int i=1;i<list.size();i++) {if(list.get(i)-list.get(i-1)==2) a=list.get(i)-1;if(list.get(i).equals(list.get(i-1))) //集合元素使用equals進(jìn)行比較b=list.get(i);}System.out.println(a+" "+b);}
}

``

幸運(yùn)數(shù)字

幸運(yùn)數(shù)字1,刪去被2整除的數(shù),得3為第二個(gè)幸運(yùn)數(shù)字

import java.util.Scanner;public class _08幸運(yùn)數(shù) {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int m=sc.nextInt();int n=sc.nextInt();int[] a=new int[n];for(int i=0;i<n;i++) a[i]=i*2+1;int l=1;//幸運(yùn)數(shù)字下標(biāo)為1,a[l]是幸運(yùn)數(shù)字while(true) {int p=l+1;for(int i=l+1;i<n;i++) {if((i+1)%a[l]==0) {}else{a[p]=a[i];p++;}			}l++;if(a[l]>=n) break;}		int ans=0;for(int i=0;i<n;i++) {if(a[i]>=n) break;if(a[i]>m) ans++;			}		}
}

帶分?jǐn)?shù)

100表示為100=3+69258/714,1~9不重復(fù),有11種表示方法
輸出有多少種?

  • 遞歸框架求全排列
import java.util.Scanner;public class _09帶分?jǐn)?shù) {static int ans;private static int N;public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);N=sc.nextInt();int[] arr= {1,2,3,4,5,6,7,8,9};f(arr,0);System.out.println(ans);}//確認(rèn)某一個(gè)排列的第k位private static void f(int[] arr, int k) {// TODO Auto-generated method stubif(k==9) {//全部確認(rèn)check(arr);return;}//選定第k位for(int i=k;i<arr.length;i++) {int t=arr[i];arr[i]=arr[k];arr[k]=t;//移交下一層去確認(rèn)k+1位f(arr, k+1);//回溯t=arr[i];arr[i]=arr[k];arr[k]=t;}}private static void check(int[] arr) {// TODO Auto-generated method stubfor(int i=1;i<=7;i++) {int num1=toInt(arr,0,i);//加號(hào)前的數(shù)if(num1>=N) continue;for(int j=1;j<=8-i;j++) {int num2=toInt(arr, i, j);int num3=toInt(arr, i+j, 9-i-j);if(num2%num3==0&&num1+num2/num3==N)ans++;}}
}
private static int toInt(int[] arr, int pos, int length) {// TODO Auto-generated method stubint t=1;int ans=0;for(int i=pos+length-1;i>=pos;i--) {ans+=arr[i]*t;t*=10;}return ans;}
}

連號(hào)區(qū)間數(shù)

  • 判斷ij連續(xù)區(qū)間,最大-最小
import java.util.Scanner;public class _10連號(hào)區(qū)間數(shù) {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int n=sc.nextInt();int[] arr=new int[n+1];for(int i=1;i<=n;i++) arr[i]=sc.nextInt();int ans=0;for(int i=1;i<=n;i++) {int max=arr[i];int min=arr[i];for(int j=i;j<=n;j++) {if(arr[j]>max) max=arr[j];if(arr[j]<min) min=arr[j];if(i==j) ans++;else{//判斷ij連續(xù)區(qū)間,最大-最小if(max-min==j-i)ans++;					}}}}
}

2014年真題藍(lán)橋杯Java B組

03猜字母

把a(bǔ)bcd…s共19個(gè)字母組成的序列重復(fù)拼接106次,得到長(zhǎng)度為2014的串。

接下來刪除第1個(gè)字母(即開頭的字母a),以及第3個(gè),第5個(gè)等所有奇數(shù)位置的字母。

得到的新串再進(jìn)行刪除奇數(shù)位置字母的動(dòng)作。如此下去,最后只剩下一個(gè)字母,請(qǐng)寫出該字母。

答案是一個(gè)小寫字母,請(qǐng)通過瀏覽器提交答案。不要填寫任何多余的內(nèi)容。

public class _03猜字母 {public static void main(String[] args) {// TODO Auto-generated method stubString s="abcdefghijklmnopqrs";//abcdefghijklmnopqrsString ss="";for(int i=0;i<106;i++) {ss+=s;}char[] a=ss.toCharArray();//構(gòu)造數(shù)組int len=a.length;while(len>1){//對(duì)數(shù)組進(jìn)行刪除int k=0;for(int i=0;i<len;i++) {if(i%2!=0)//下標(biāo)為偶數(shù),個(gè)數(shù)為奇數(shù),刪除a[k++]=a[i];else len--;		}for(int i=0;i<len;i++) {System.out.print(a[i]);}System.out.println();}System.out.println(a[0]);}
}

06奇怪的分式

上小學(xué)的時(shí)候,小明經(jīng)常自己發(fā)明新算法。一次,老師出的題目是:

1/4 乘以 8/5

小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45

老師剛想批評(píng)他,轉(zhuǎn)念一想,這個(gè)答案湊巧也對(duì)啊,真是見鬼!

對(duì)于分子、分母都是 1~9 中的一位數(shù)的情況,還有哪些算式可以這樣計(jì)算呢?

請(qǐng)寫出所有不同算式的個(gè)數(shù)(包括題中舉例的)。

顯然,交換分子分母后,例如:4/1 乘以 5/8 是滿足要求的,這算做不同的算式。

但對(duì)于分子分母相同的情況,2/2 乘以 3/3 這樣的類型太多了,不在計(jì)數(shù)之列!

注意:答案是個(gè)整數(shù)(考慮對(duì)稱性,肯定是偶數(shù))。請(qǐng)通過瀏覽器提交。不要書寫多余的內(nèi)容。

public class _06奇怪的分式 {public static void main(String[] args) {int sum = 0;for (int a = 1; a < 10; a++)for (int b = 1; b < 10; b++)for (int c = 1; c < 10; c++)for (int d = 1; d < 10; d++)if (a != b && c != d&& a * c * (b * 10 + d) == b * d * (a * 10 + c)) {System.out.println(a + "/" + b + " " + c + "/" + d);sum++;}System.out.println(sum);}}

07撲克牌序列

A A 2 2 3 3 4 4, 一共4對(duì)撲克牌。請(qǐng)你把它們排成一行。
要求:兩個(gè)A中間有1張牌,兩個(gè)2之間有2張牌,兩個(gè)3之間有3張牌,兩個(gè)4之間有4張牌。

請(qǐng)?zhí)顚懗鏊蟹弦蟮呐帕兄?#xff0c;字典序最小的那個(gè)。

例如:22AA3344 比 A2A23344 字典序小。當(dāng)然,它們都不是滿足要求的答案。
請(qǐng)通過瀏覽器提交答案?!癆”一定不要用小寫字母a,也不要用“1”代替。字符間一定不要留空格。

public class _07撲克序列 {static char[]a= {'4','4','2','2','3','3','A','A'};public static void main(String[] args) {// TODO Auto-generated method stubf(0);}static void f(int k) {if(k==8) {String s=new String(a);//System.out.println(s);if(check(s)==true) {System.out.println(s);}}for(int i=k;i<8;i++) {{char t=a[k];a[k]=a[i];a[i]=t;}f(k+1);{char t=a[k];a[k]=a[i];a[i]=t;}}}static boolean check(String s) {if(s.lastIndexOf('A')-s.indexOf('A')==2&&s.lastIndexOf('2')-s.indexOf('2')==3&&s.lastIndexOf('3')-s.indexOf('3')==4&&s.lastIndexOf('4')-s.indexOf('4')==5)return true;return false;}}

08分糖果

有n個(gè)小朋友圍坐成一圈。老師給每個(gè)小朋友隨機(jī)發(fā)偶數(shù)個(gè)糖果,然后進(jìn)行下面的游戲:

每個(gè)小朋友都把自己的糖果分一半給左手邊的孩子。

一輪分糖后,擁有奇數(shù)顆糖的孩子由老師補(bǔ)給1個(gè)糖果,從而變成偶數(shù)。

反復(fù)進(jìn)行這個(gè)游戲,直到所有小朋友的糖果數(shù)都相同為止。

你的任務(wù)是預(yù)測(cè)在已知的初始糖果情形下,老師一共需要補(bǔ)發(fā)多少個(gè)糖果。

import java.util.Scanner;
public class _08分糖果 {//添加一個(gè)數(shù)組用于儲(chǔ)存每個(gè)孩子手中的糖果數(shù)的一半public static void main(String[] args) {int sum = 0;Scanner sc = new Scanner(System.in);int n = sc.nextInt();int a[] = new int[n + 1];int f[] = new int[n + 1];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();//輸入糖果數(shù)f[i] = a[i] / 2;}int flag = 1;while (flag == 1) {flag = 0;for (int i = 0; i < n - 1; i++) {if (a[i] != a[i + 1])//糖果數(shù)相等時(shí)退出循環(huán)flag = 1;}if (flag == 1) {for (int i = 0; i < n; i++) {if (i == n - 1)//最右邊的小朋友每輪過后剩的糖果數(shù)a[i] = a[i] / 2 + f[0];else//其他小朋友每輪過后剩的糖果數(shù)a[i] = a[i] / 2 + f[i + 1];}for (int i = 0; i < n; i++) {if (a[i] % 2 == 1) {//當(dāng)前糖果數(shù)為奇數(shù)a[i] += 1;f[i] = a[i] / 2;sum++;} elsef[i] = a[i] / 2;}}}System.out.println(sum);}}

09地宮取寶

X 國(guó)王有一個(gè)地宮寶庫。是 n x m 個(gè)格子的矩陣。每個(gè)格子放一件寶貝。每個(gè)寶貝貼著價(jià)值標(biāo)簽。

地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國(guó)王要求他只能向右或向下行走。走過某個(gè)格子時(shí),如果那個(gè)格子中的寶貝價(jià)值比小明手中任意寶貝價(jià)值都大,小明就可以拿起它(當(dāng)然,也可以不拿)。當(dāng)小明走到出口時(shí),如果他手中的寶貝恰好是k件,則這些寶貝就可以送給小明。請(qǐng)你幫小明算一算,在給定的局面下,他有多少種不同的行動(dòng)方案能獲得這k件寶貝。

輸入

輸入一行3個(gè)整數(shù),用空格分開:n m k (1<=n,m<=50, 1<=k<=12)

接下來有 n 行數(shù)據(jù),每行有 m 個(gè)整數(shù) Ci (0<=Ci<=12)代表這個(gè)格子上的寶物的價(jià)值

輸出
要求輸出一個(gè)整數(shù),表示正好取k個(gè)寶貝的行動(dòng)方案數(shù)。該數(shù)字可能很大,輸出它對(duì) 1000000007 取模的結(jié)果。

樣例輸入
2 3 2
1 2 3
2 1 5
樣例輸出
14

import java.util.Scanner;public class _09地宮取寶 {static int[][] a = new int[55][55],flag = new int[55][55];static int ans = 0,n,m,k;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();k = in.nextInt();for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {a[i][j] = in.nextInt();}}bfs(0,0,-1,0);//-1記錄的是寶貝的價(jià)值System.out.println(ans);}private static void bfs(int i, int j, int max, int x) {int cur = a[i][j];//當(dāng)前寶貝的價(jià)值if(i >= n || j >= m || x > k) {return;}if(i == n-1 && j == m-1 ) {//走到出口if (x == k || (x == k-1 && cur > max)) {ans++;ans = ans % 1000000007;}}//當(dāng)前寶貝的價(jià)值大,并且要拿起它的情況if(cur > max) {bfs(i+1,j,cur,x+1);bfs(i, j+1, cur, x+1);}//當(dāng)前寶貝價(jià)值小或價(jià)值大但不拿當(dāng)前寶貝的情況bfs(i, j+1, max, x);bfs(i+1, j, max, x);}
}

10矩陣翻硬幣

小明先把硬幣擺成了一個(gè) n 行 m 列的矩陣。

隨后,小明對(duì)每一個(gè)硬幣分別進(jìn)行一次 Q 操作。

對(duì)第x行第y列的硬幣進(jìn)行 Q 操作的定義:將所有第 ix 行,第 jy 列的硬幣進(jìn)行翻轉(zhuǎn)。

其中i和j為任意使操作可行的正整數(shù),行號(hào)和列號(hào)都是從1開始。

當(dāng)小明對(duì)所有硬幣都進(jìn)行了一次 Q 操作后,他發(fā)現(xiàn)了一個(gè)奇跡——所有硬幣均為正面朝上。

小明想知道最開始有多少枚硬幣是反面朝上的。于是,他向他的好朋友小M尋求幫助。

聰明的小M告訴小明,只需要對(duì)所有硬幣再進(jìn)行一次Q操作,即可恢復(fù)到最開始的狀態(tài)。然而小明很懶,不愿意照做。于是小明希望你給出他更好的方法。幫他計(jì)算出答案。
輸入格式
  輸入數(shù)據(jù)包含一行,兩個(gè)正整數(shù) n m,含義見題目描述。
輸出格式
  輸出一個(gè)正整數(shù),表示最開始有多少枚硬幣是反面朝上的。
樣例輸入
2 3
樣例輸出
1
數(shù)據(jù)規(guī)模和約定
  對(duì)于10%的數(shù)據(jù),n、m <= 10^3;
  對(duì)于20%的數(shù)據(jù),n、m <= 10^7;
  對(duì)于40%的數(shù)據(jù),n、m <= 10^15;
  對(duì)于10%的數(shù)據(jù),n、m <= 10^1000(10的1000次方)。

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s1 = in.next();//nString s2 = in.next();//mBigInteger b1 = sqrt(s1);//根號(hào)nBigInteger b2 = sqrt(s2);//根號(hào)m//結(jié)果是根號(hào)n和根號(hào)m的乘積System.out.println(b1.multiply(b2));}private static BigInteger sqrt(String s) {BigInteger n = new BigInteger(s);int length = s.length();int len = 0;//記錄根號(hào)n是幾位數(shù)if (length % 2 == 0) {len = length/2;} else {len = length/2 + 1;}char[] a = new char[len];//用字符串存儲(chǔ)根號(hào)nArrays.fill(a, '0');//字符串用0填充//下面開始從根號(hào)n的最高位開始猜for (int i = 0; i < len; i++) {//每一位的數(shù)都是由1~9的數(shù)字組成的for (char j = '1'; j <= '9'; j++) {a[i] = j;BigInteger t = new BigInteger(String.valueOf(a));BigInteger pow = t.pow(2);//判斷這個(gè)數(shù)的平方是否比n大,就說明找到了這個(gè)數(shù)if (pow.compareTo(n) == 1) {a[i] -= 1;break;}}}BigInteger b = new BigInteger(String.valueOf(a));return b;}}

2015年真題Java B組

01三角形面積(結(jié)果填空3’)

02立方變自身(結(jié)果填空5’)

觀察下面的現(xiàn)象,某個(gè)數(shù)字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17

請(qǐng)你計(jì)算包括1,8,17在內(nèi),符合這個(gè)性質(zhì)的正整數(shù)一共有多少個(gè)?

請(qǐng)?zhí)顚懺摂?shù)字,不要填寫任何多余的內(nèi)容或說明性的文字。

  • 暴力求解
  • 改進(jìn),各位數(shù)求和可化為字符串后,sum+=s.charAt(i)-‘0’;
public class _02立方變自身 {static boolean isItself(int m){int a=m*m*m;String s=String.valueOf(a);int sum=0;for(int i=0;i<s.length();i++) {
//			sum+=a%10;
//			a=a/10;sum+=s.charAt(i)-'0';}if(sum==m)return true;return false;	}public static void main(String[] args) {// TODO Auto-generated method stubint cnt=0;for(int i=1;i<100000;i++) {if(isItself(i)==true) {System.out.println(i);cnt++;}}System.out.println(cnt);}
}

03三羊開泰(結(jié)果填空9’)

觀察下面的加法算式:
在這里插入圖片描述

其中,相同的漢字代表相同的數(shù)字,不同的漢字代表不同的數(shù)字。

請(qǐng)你填寫“三羊獻(xiàn)瑞”所代表的4位數(shù)字(答案唯一),不要填寫任何多余內(nèi)容。

  • 暴力枚舉if(x1==x2) contiue;
  • 全排列
public class _03散養(yǎng)獻(xiàn)瑞 {public static void main(String[] args) {// TODO Auto-generated method stubint []a={0,1,2,3,4,5,6,7,8,9};dfs(a,0);		}private static void dfs(int[] a, int m) {// TODO Auto-generated method stubif(m>10)return;if(m==10){//結(jié)束深搜int x = 1000*a[0] + 100*a[1] + 10*a[2] + a[3];int y = 1000*a[4] + 100*a[5] + 10*a[6] + a[1];int z = 10000*a[4] + 1000*a[5] + 100*a[2] + 10*a[1] + a[7];if(a[0]==0 || a[4]==0) //保證位數(shù)return;if(x+y==z)System.out.println(x+"+"+y+"=="+z);}for(int i=m;i<10;i++) {int t=a[i];a[i]=a[m];a[m]=t;dfs(a, m+1);t=a[i];a[i]=a[m];a[m]=t;	}
}
}

04循環(huán)節(jié)長(zhǎng)度(代碼填空11’)

兩個(gè)整數(shù)做除法,有時(shí)會(huì)產(chǎn)生循環(huán)小數(shù),其循環(huán)部分稱為:循環(huán)節(jié)。
比如,11/13=6=>0.846153846153… 其循環(huán)節(jié)為[846153] 共有6位。
下面的方法,可以求出循環(huán)節(jié)的長(zhǎng)度。

請(qǐng)仔細(xì)閱讀代碼,并填寫劃線部分缺少的代碼。

public static int f(int n, int m)
{n = n % m;    Vector v = new Vector();for(;;){v.add(n);n *= 10;n = n % m;if(n==0) return 0;if(v.indexOf(n)>=0)  _________________________________ ;  //填空}

*答案: return v.size() - v.indexOf(n);

05九數(shù)組分?jǐn)?shù)(代碼填空15’)

06加法變乘法(結(jié)果填空17’)

我們都知道:1+2+3+ … + 49 = 1225
現(xiàn)在要求你把其中兩個(gè)不相鄰的加號(hào)變成乘號(hào),使得結(jié)果為2015

比如:
1+2+3+…+1011+12+…+2728+29+…+49 = 2015
就是符合要求的答案。

請(qǐng)你尋找另外一個(gè)可能的答案,并把位置靠前的那個(gè)乘號(hào)左邊的數(shù)字提交(對(duì)于示例,就是提交10)。

  • 仔細(xì)分析題目,發(fā)現(xiàn)可以直接枚舉法解決問題,兩重循環(huán)
public class _06加法變乘法 {public static void main(String[] args) {// TODO Auto-generated method stubfor (int i = 1; i < 46; i++) {for (int j = i+2; j <48; j++) {if((i*(i+1)-(i+i+1)+j*(j+1)-(2*j+1)==2015-1225))System.out.println(i+" "+j);				}			}}
}

07牌型種數(shù)(結(jié)果填空21’)

小明被劫持到X賭城,被迫與其他3人玩牌。
一副撲克牌(去掉大小王牌,共52張),均勻發(fā)給4個(gè)人,每個(gè)人13張。
這時(shí),小明腦子里突然冒出一個(gè)問題:
如果不考慮花色,只考慮點(diǎn)數(shù),也不考慮自己得到的牌的先后順序,自己手里能拿到的初始牌型組合一共有多少種呢?

請(qǐng)?zhí)顚懺撜麛?shù),不要填寫任何多余的內(nèi)容或說明文字。

  • 遞歸求解
  • 好像可以又直接暴力枚舉,用13個(gè)for循環(huán)解決問題,咱考試的時(shí)間還是非常充足的
public class _07牌型種類 {static int ans = 0;static int sum = 0;static void dfs(int cur)    //cur取牌的次數(shù),sum手牌的總數(shù){if (sum>13)return;if (cur == 13){if (sum == 13) ans++;return;}for (int i = 0; i <= 4; i++){  //13種牌,每種有4張,有五種取法 取0,1,2,3,4張sum += i;dfs(cur + 1);sum -= i;     //還原}    }public static void main(String[] args) {// TODO Auto-generated method stubdfs(0);System.out.println(ans);}
}

08飲料換購(gòu)(程序設(shè)計(jì)13’)

樂羊羊飲料廠正在舉辦一次促銷優(yōu)惠活動(dòng)。樂羊羊C型飲料,憑3個(gè)瓶蓋可以再換一瓶C型飲料,并且可以一直循環(huán)下去,但不允許賒賬。

請(qǐng)你計(jì)算一下,如果小明不浪費(fèi)瓶蓋,盡量地參加活動(dòng),那么,對(duì)于他初始買入的n瓶飲料,最后他一共能得到多少瓶飲料。

輸入:一個(gè)整數(shù)n,表示開始購(gòu)買的飲料數(shù)量(0<n<10000)
輸出:一個(gè)整數(shù),表示實(shí)際得到的飲料數(shù)

例如:
用戶輸入:
100
程序應(yīng)該輸出:
149

用戶輸入:
101
程序應(yīng)該輸出:
151

import java.util.Scanner;public class _08飲料換購(gòu)_ {public static void main(String[] args) {// TODO Auto-generated method stubScanner scanner=new Scanner(System.in);int n=scanner.nextInt();int sum=n;while(n>=3) {sum+=n/3;n=n%3+n/3;}System.out.println(sum);}
}

09壘骰子(程序設(shè)計(jì)25’)

賭圣atm晚年迷戀上了壘骰子,就是把骰子一個(gè)壘在另一個(gè)上邊,不能歪歪扭扭,要壘成方柱體。
經(jīng)過長(zhǎng)期觀察,atm 發(fā)現(xiàn)了穩(wěn)定骰子的奧秘:有些數(shù)字的面貼著會(huì)互相排斥!
我們先來規(guī)范一下骰子:1 的對(duì)面是 4,2 的對(duì)面是 5,3 的對(duì)面是 6。
假設(shè)有 m 組互斥現(xiàn)象,每組中的那兩個(gè)數(shù)字的面緊貼在一起,骰子就不能穩(wěn)定的壘起來。 atm想計(jì)算一下有多少種不同的可能的壘骰子方式。
兩種壘骰子方式相同,當(dāng)且僅當(dāng)這兩種方式中對(duì)應(yīng)高度的骰子的對(duì)應(yīng)數(shù)字的朝向都相同。
由于方案數(shù)可能過多,請(qǐng)輸出模 10^9 + 7 的結(jié)果。

不要小看了 atm 的骰子數(shù)量哦~

「輸入格式」
第一行兩個(gè)整數(shù) n m
n表示骰子數(shù)目
接下來 m 行,每行兩個(gè)整數(shù) a b ,表示 a 和 b 不能緊貼在一起。

「輸出格式」
一行一個(gè)數(shù),表示答案模 10^9 + 7 的結(jié)果。

「樣例輸入」
2 1
1 2


public class _09_壘骰子 {static int op[] = new int[7];private static int n;private static int m;private static final long MOD = 1000000007;static void init() {op[1] = 4;op[4] = 1;op[2] = 5;op[5] = 2;op[3] = 6;op[6] = 3;}public static void main(String[] args) {init();Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();long conflict[][] = new long[6][6];for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {conflict[i][j]=1;}}//建立沖突矩陣for (int i = 0; i < m; i++) {int a = sc.nextInt();int b = sc.nextInt();conflict[op[a] - 1][b - 1] = 0;conflict[op[b] - 1][a - 1] = 0;}//  求沖突矩陣的n-1次方long[][] mPow_n_1 = mPow(conflict, n - 1);//累加矩陣的每個(gè)元素long ans = 0;for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {ans = (ans + mPow_n_1[i][j]) % MOD;}}//ans*4^nSystem.out.println(ans * power(4, n) % MOD);}private static long power(long i, int n) {long ans = 1;while (n != 0) {if ((n & 1) == 1) ans = (ans * i) % MOD;i = i * i % MOD;n >>= 1;}return ans;}/*矩陣的快速冪*/private static long[][] mPow(long[][] conflict, int n) {long[][] e = new long[6][6];for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {if (i == j) e[i][j] = 1;else e[i][j] = 0;}}while (n != 0) {if ((n & 1) == 1) {e = mMul(e, conflict);}conflict = mMul(conflict, conflict);n >>= 1;}return e;}private static long[][] mMul(long[][] a, long[][] b) {long[][] ans = new long[6][6];for (int i = 0; i < 6; i++) {for (int j = 0; j < 6; j++) {for (int k = 0; k < 6; k++) {ans[i][j] = (ans[i][j] + a[i][k] * b[k][j]) % MOD;}}}return ans;}
}

2021年真題Java B組

結(jié)果填空

1.計(jì)算ASC碼(5’):

‘L’+0

2.卡片表示數(shù)字(5‘):

Arrays.fill(v,n);

3.直線(15’):

Set去重StringBuffer.append( )/.toString();
Set< String> set=new HashSet< String>()

4.貨物堆放(10‘):

  • long-10^18 12byte=96bit
  • int 10^10
  • static long[] val = new long[101000];

**5.路徑(15’)(最短路徑問題)

  • Floyd算法
    for(int i,j,k;<2025;++)
    if (gragh[i][k] + gragh[k][j] < gragh[i][j])
    gragh[i][j] = gragh[i][k] + gragh[k][j];

  • 求最小公倍數(shù):i/gcd(i,j)*j

  • 求最小公因數(shù):if(j==0)
    return i;
    return gcd(j, i%j);

代碼編程

6.時(shí)間顯示(15‘)

  • 格式化輸出: System.out.format(“%02d”, a);
    System.out.format(“%o\n”,i);//“o"表示格式化輸出八進(jìn)制整數(shù)
    System.out.format(”%x\n",i);//"x"表示格式化輸出十六進(jìn)制整數(shù)

  • BigInteger
    浮點(diǎn)數(shù)的比較可以使用:BigDecimal.compareTo(f2) == 0

BigDecimal bigDecimal = new BigDecimal(12.52);System.out.println(bigDecimal);BigInteger []aBigIntegers=new BigInteger[2030];aBigIntegers[0]=BigInteger.ZERO;aBigIntegers[1]=BigInteger.ONE;aBigIntegers[2]=BigInteger.ONE;for(int i=3;i<2030;i++) {aBigIntegers[i]=aBigIntegers[i-1].add(aBigIntegers[2]);}BigInteger mBigInteger=aBigIntegers[2020];BigInteger nBigInteger=aBigIntegers[520];System.out.println(f(mBigInteger,nBigInteger));

**7.最少砝碼(15’)

*8.楊輝三角(20’)

  • 利用鏈表構(gòu)造
    List list=new ArrayList()
    list.addAll(list2)/add(1)
  • 對(duì)于list進(jìn)行遍歷:for(Long l: list)
    list.indexOf(2021);

*9.雙向排序(25’)==

  • 對(duì)于數(shù)組進(jìn)行逆序排序
    Comparator comparator = new Comparator() {
    public int compare(Integer a, Integer b) {
    return b - a;
    }
    };
    Arrays.sort(r, 1, q + 1, comparator);

**10.括號(hào)排序(25’)

括號(hào)匹配問題
Map.get(‘(’)
Map.containsValue/containsKey
Map.put(‘(’),‘(’)
Stack.empty()/pop()/peek()

public class isMatch {public static void main(String[] args) {String string ="([a+b]-(rr{}))";boolean res =  match(string);System.out.println(res);}public static boolean match(String str) {Map<Character,Character> map = new HashMap<>();map.put(')', '(');map.put(']', '[');map.put('}', '{');Stack<Character> stack =new Stack<>();for(int i=0;i<str.length();i++) {Character c =str.charAt(i);if(map.containsValue(c)) {//左括號(hào)入棧stack.push(c);}else if(map.containsKey(c)) {//右括號(hào)出棧匹配if(stack.empty()) {return false;}if(stack.peek()==map.get(c)) {stack.pop();}else {return false;}}}return stack.empty()?true:false;}
}

2021年第二場(chǎng)Java B組

質(zhì)因子與完全平方數(shù)

  • 當(dāng)前數(shù)的所有質(zhì)因子的指數(shù)為偶數(shù),不是偶數(shù)就再乘個(gè)該質(zhì)因子

DFS(遞歸回溯)

import java.util.Scanner;public class Main {static int MOD = 1000000007;static int ans = 0;static int n, m, k;// 方向數(shù)組static int[] xx = new int[] {1, 1, -1, -1, 2, 2, -2, -2};static int[] yy = new int[] {2, -2, 2, -2, 1, -1, 1, -1};static int[][] cnt;// 是否有馬
//    static boolean[][] vis; 不能用vis數(shù)組來標(biāo)記不能放馬的位置,因?yàn)槠灞P上某一點(diǎn)可能有多個(gè)馬共同進(jìn)行限制,需要對(duì)限制數(shù)計(jì)數(shù)public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();m = scan.nextInt();k = scan.nextInt();cnt = new int[n][m];// 從左上角第一個(gè)格子開始放,初始已放馬的個(gè)數(shù) = 0dfs(0, 0, 0);System.out.println(ans);}static void dfs (int x, int y, int horse) {if (horse == k) {ans = (ans + 1) % MOD;return;}// 切換到下一行第一個(gè)元素if (y >= m) {y = 0;x++;if (x >= n) return;}// 當(dāng)前(x,y)位置不放馬dfs(x, y + 1, horse);// 當(dāng)前(x,y)位置放馬// 先判斷能否放馬if (cnt[x][y] == 0) {cnt[x][y]++;// 遍歷當(dāng)前位置的馬能夠跳到的棋盤位置,標(biāo)記為truefor (int i = 0; i < 8; i++) {int tmpx = x + xx[i];int tmpy = y + yy[i];if (tmpx < 0 || tmpy < 0 || tmpx >= n || tmpy >= m) {continue;}cnt[tmpx][tmpy]++;}// 放了馬之后繼續(xù)遍歷dfs(x, y + 1, horse + 1);// 別忘了回溯// 回溯:一切在之前change過的變量,全都要恢復(fù)cnt[x][y]--;for (int i = 0; i < 8; i++) {int tmpx = x + xx[i];int tmpy = y + yy[i];if (tmpx < 0 || tmpy < 0 || tmpx >= n || tmpy >= m) {continue;}cnt[tmpx][tmpy]--;}}}
}
http://www.risenshineclean.com/news/49801.html

相關(guān)文章:

  • 運(yùn)營(yíng)網(wǎng)站長(zhǎng)沙seo技術(shù)培訓(xùn)
  • 網(wǎng)站建設(shè)優(yōu)惠中ui培訓(xùn)
  • 國(guó)內(nèi)做網(wǎng)站建設(shè)知名的公司怎么優(yōu)化標(biāo)題和關(guān)鍵詞排名
  • 大連做網(wǎng)站billionseo下載愛城市網(wǎng)app官方網(wǎng)站
  • 昆明二級(jí)站seo整站優(yōu)化排名上海最新新聞
  • 汽修網(wǎng)站建設(shè)免費(fèi)推廣營(yíng)銷平臺(tái)
  • 做自媒體發(fā)視頻用哪些網(wǎng)站百度域名查詢官網(wǎng)
  • 一些做系統(tǒng)的網(wǎng)站網(wǎng)絡(luò)服務(wù)器的功能
  • 點(diǎn)開圖片跳到網(wǎng)站怎么做網(wǎng)絡(luò)營(yíng)銷最火的案例
  • 建網(wǎng)站添加付款方式中國(guó)軟文網(wǎng)官網(wǎng)
  • 電商網(wǎng)站產(chǎn)品設(shè)計(jì)優(yōu)化技術(shù)主要是上海專業(yè)seo服務(wù)公司
  • 衢州站電話重慶疫情最新情況
  • 石巖網(wǎng)站建設(shè) 0755seo網(wǎng)絡(luò)排名優(yōu)化
  • 公司網(wǎng)站建設(shè)企劃書app推廣員怎么做
  • 建網(wǎng)站 網(wǎng)站內(nèi)容怎么做地推
  • 杭州pc網(wǎng)站建設(shè)方案蚌埠seo外包
  • 1個(gè)空間做兩個(gè)網(wǎng)站百度網(wǎng)盤app下載安裝官方免費(fèi)版
  • 的推網(wǎng)站模板百度帳號(hào)申請(qǐng)注冊(cè)
  • 外貿(mào)商城網(wǎng)站網(wǎng)站建設(shè)合同模板
  • 龍門惠州網(wǎng)站建設(shè)如何申請(qǐng)一個(gè)網(wǎng)站域名
  • 網(wǎng)站建設(shè)實(shí)錄活動(dòng)推廣宣傳方案
  • 英文營(yíng)銷網(wǎng)站 知乎seo長(zhǎng)尾關(guān)鍵詞排名
  • 電子商務(wù)網(wǎng)站建設(shè)實(shí)用教程教案黃頁88推廣多少錢一年
  • php 網(wǎng)站建設(shè)方案內(nèi)容營(yíng)銷案例
  • 幫別人起名 做ppt的網(wǎng)站做百度推廣怎么做才能有電話
  • 網(wǎng)站版面在線設(shè)計(jì)愛站權(quán)重查詢
  • 網(wǎng)站建設(shè)的功能都需要有哪些方面網(wǎng)圖識(shí)別在線百度
  • 客戶做網(wǎng)站一定報(bào)價(jià)怎么辦網(wǎng)站推廣的方式有
  • 政府網(wǎng)站群整合建設(shè)方案營(yíng)銷方法
  • 做刷單網(wǎng)站犯法嗎新開店鋪怎么做推廣