2025藍橋杯JAVA編程題練習Day8

1.?路徑

題目描述

小藍學習了最短路徑之后特別高興,他定義了一個特別的圖,希望找到圖 中的最短路徑。

小藍的圖由 2021 個結點組成,依次編號 1 至 2021。

對于兩個不同的結點 a, b,如果 a 和 b 的差的絕對值大于 21,則兩個結點 之間沒有邊相連;如果 a 和 b 的差的絕對值小于等于 21,則兩個點之間有一條 長度為 a 和 b 的最小公倍數的無向邊相連。

例如:結點 1 和結點 23 之間沒有邊相連;結點 3 和結點 24 之間有一條無 向邊,長度為 24;結點 15 和結點 25 之間有一條無向邊,長度為 75。

請計算,結點 1 和結點 2021 之間的最短路徑長度是多少。

提示:建議使用計算機編程解決問題。

解題要點

由于你在圖中使用了加權邊,傳統的 BFS 不能直接用于加權邊的最短路徑求解。對于加權圖,通常使用 Dijkstra 算法來計算最短路徑。

主要步驟:

  1. 使用 優先隊列(最小堆)來幫助處理加權圖。

  2. 使用 Dijkstra 算法來求解從節點 1 到節點 n 的最短路徑。

AC代碼

import java.util.*;
class Edge{int target;int weight;public Edge(int target,int weight) {this.target=target;this.weight=weight;}
}
public class exercise1{public static Scanner scan=new Scanner(System.in);public static int gcd(int a,int b) {return b==0?a:gcd(b,a%b);}public static int lcm(int a,int b) {return (a*b)/gcd(a,b);}public static void main(String[] args) {int n=2021;List<List<Edge>>graph=new LinkedList<>();for(int i=0;i<=n;i++) {graph.add(new LinkedList<>());}for(int i=1;i<=n;i++) {for(int j=i+1;j<=n;j++) {if(j-i>21)continue;else {int weight=lcm(j,i);graph.get(i).add(new Edge(j,weight));graph.get(j).add(new Edge(i,weight));}}}//求1到n的最短路徑(Dijkstra算法)int[] dist = new int[n+1]; // 存儲最短路徑Arrays.fill(dist, Integer.MAX_VALUE);dist[1]=0;// 優先隊列,存儲每個節點和它的當前距離PriorityQueue<int[]>pq=new PriorityQueue<>(Comparator.comparingInt(a -> a[1])); // 按距離排序pq.add(new int[]{1,0});while(!pq.isEmpty()) {int[] cur=pq.poll();int u=cur[0];int cd=cur[1];// 如果當前節點的距離已經大于已知的最短距離,跳過if(cd>dist[u])continue;for(Edge ed:graph.get(u)) {int v=ed.target;int w=ed.weight;int newd=cd+w;if(newd<dist[v]) {dist[v]=newd;pq.add(new int[] {v,newd});}}}System.out.println(dist[n]);}
}

2.排列字母

問題描述

小藍要把一個字符串中的字母按其在字母表中的順序排列。

例如,LANQIAO 排列后為 AAILNOQ。

又如,GOODGOODSTUDYDAYDAYUP 排列后為 AADDDDDGGOOOOPSTUUYYY。

請問對于以下字符串,排列之后字符串是什么?

WHERETHEREISAWILLTHEREISAWAY

AC代碼

import java.util.*;
public class exercise1{public static Scanner scan=new Scanner(System.in);public static void main(String[] args) {String s="WHERETHEREISAWILLTHEREISAWAY";char[] a=s.toCharArray();Arrays.sort(a);for(int i=0;i<a.length;i++) {System.out.print(a[i]);}}
}

3.飲料換購

題目描述

樂羊羊飲料廠正在舉辦一次促銷優惠活動。樂羊羊 C 型飲料,憑 3 個瓶蓋可以再換一瓶 C 型飲料,并且可以一直循環下去(但不允許暫借或賒賬)。

請你計算一下,如果小明不浪費瓶蓋,盡量地參加活動,那么,對于他初始買入的 n 瓶飲料,最后他一共能喝到多少瓶飲料。

輸入描述

輸入一個整數?n(0<n<1000)n(0<n<1000),表示開始購買的飲料數量。

輸出描述

輸出一個整數,表示實際得到的飲料數

輸入輸出樣例

輸入

100

輸出

149

AC代碼?

import java.util.*;
public class exercise1{public static Scanner scan=new Scanner(System.in);public static void main(String[] args) {int n=scan.nextInt();int ans=0;while(n>=3) {n-=3;ans+=3;n+=1;}ans+=n;System.out.println(ans);}
}

4.七邊形

問題描述

小藍迷上了七邊形,他正嘗試用小球來拼接出他喜歡的七邊形圖案。 下圖是他拼出的前四個七邊形,第?11?至第?44?個七邊形圖案消耗的小球數量依次是?11、77、1818、3434。 請問對于第?2024060120240601?個七邊形圖案,需要消耗的小球數量是多少?

AC代碼

(記得開long!!)

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);long ans=0;for(int i=1;i<=20240601;i++){if(i==1)ans=1;else{ans+=i*3;ans+=(i-2)*2;}}System.out.println(ans);scan.close();}
}

5.完美數對

問題描述

藍橋杯作為最熱門的程序設計競賽之一,主辦方為了更好地評估選手的程序設計能力,新研制了一臺用于檢測選手程序設計能力的儀器。

主辦方邀請了?NN?位同學進行檢測,以驗證機器的準確性。檢測結果表示為數組?AA,其中第?ii?位同學檢測出的能力值為?AiAi?。

得知這一檢測結果后,藍橋杯的出題人小藍獲得了出題靈感。他希望統計滿足以下條件的正整數對?(a,b)(a,b)?的數量,這些數對被稱為 "完美數對":

完美數對定義:對于數對?(a,b)(a,b),若在數組?AA?中,數值?aa?至少出現了?bb?次,且數值?bb?至少出現了?aa?次,則數對?(a,b)(a,b)?被稱為完美數對。

現在,請您協助小藍解決這個問題。

輸入格式

第一行輸入一個整數?N(2≤N≤106)N(2≤N≤106)?表示接受檢測的同學數量。

第二行輸入?NN?個整數?A1,A2,A3,?,AN(1≤Ai≤106)A1?,A2?,A3?,?,AN?(1≤Ai?≤106)?表示每位同學的能力值。

輸出格式

輸出一個整數表示答案。

樣例輸入

5
1 1 2 2 3

樣例輸出

4

樣例說明

對于樣例,數對?(1,1),(1,2),(2,1),(2,2)(1,1),(1,2),(2,1),(2,2)?滿足條件,所以答案為?44。

AC代碼

import java.util.*;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();int[] a=new int[n];for(int i=0;i<n;i++){a[i]=scan.nextInt();}HashMap<Integer,Integer> hp=new HashMap<>();for(int i=0;i<n;i++){hp.put(a[i],hp.getOrDefault(a[i],0)+1); //不是更新,而是每一個都放進去}int ans=0;//枚舉hp里的每一個(HashMap的每一項)for(HashMap.Entry<Integer,Integer> e:hp.entrySet()){int x=e.getKey(); //值int hashX=e.getValue(); //次數for(int b=1;b<=hashX;b++){if(hp.containsKey(b) && hp.get(b)>=x)ans++;}}System.out.println(ans);scan.close();}
}

?6.排列高手

問題描述

第十六屆藍橋杯即將來臨,組委會的專家們希望此次比賽能夠更好地考察選手們的思維能力,因此特邀著名的排列高手——小藍參與助陣!希望他能為本屆藍橋杯設計一道富有創意的排列題。

小藍接到任務后,立即動起腦筋,口中大喊:“題來!”于是,一道關于排列的問題浮現:

給定一個大小為?nn?的排列,你可以任意調整排列的順序,以使調整后的排列所有非空子數組的?mexmex?之和最小,你需要求出這個最小的?mexmex?之和。

其中?mexmex?表示最小的不在集合中的正整數,例如?mex([1,3,4])=2,mex([2,3,4])=1mex([1,3,4])=2,mex([2,3,4])=1。

排列:一個由?11?到?nn?的所有整數組成的序列,其中每個數字恰好出現一次。

現在請你嘗試解決小藍給出的這道問題。

輸入格式

輸入一行包括一個整數?n(1≤n≤105)n(1≤n≤105)?表示排列的大小。

輸出格式

輸出一個整數表示答案。

樣例輸入

3

樣例輸出

11

樣例說明

對于樣例,一種可能的最優排列情況為?[1,3,2][1,3,2],其所有子數組?mexmex?之和為?1111。

其中?mex([1])=2,mex([1,3])=2,mex([1,3,2])=4,mex([3])=1,mex([3,2])=1,mex([2])=1mex([1])=2,mex([1,3])=2,mex([1,3,2])=4,mex([3])=1,mex([3,2])=1,mex([2])=1。

AC代碼

import java.util.*;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();//1  n  n-1 .... 2long ans = 0;for(int i = n;i>=2;i--){ans += i+1;}ans += n+1;System.out.println(ans);scan.close();}
}

7.美麗區間

問題描述

美麗區間是這樣的一組區間:[L1,R1]、[L2,R2]、[L3,R3]... 構造美麗區間需要滿足以下條件:

  1. L1=1
  2. Li≤Ri
  3. Ri?Li≥K
  4. 對于任意的?i>1,有?Li=Ri?1 + 1
  5. gcd(Li,Ri)=1,其中?gcd 指兩個數的最大公約數
  6. 在滿足上述條件的情況下,Li?、Ri 之間的差盡可能的小。

輸入格式

第一行輸入一個整數?K。 第二行輸入一個整數?T,表示有?T?組測試用例。 接下來?T?行,每行輸入一個整數?n。

輸出格式

對每個輸入的整數?n,輸出一行,包含一個整數,表示?n?屬于第幾個美麗區間。

樣例輸入

10
3
123
33
10

樣例輸出

11
3
1

樣例說明

第?1?個美麗區間為:[1,11]。

第?2?個美麗區間為:[12,23]。

第?3?個美麗區間為:[24,35]。

??

第?11?個美麗區間為:[120,131]。

評測用例規模與約定

對于?60%?的評測用例:1≤T≤10^3,1≤K≤10^6,1≤n≤10^6。

對于?100%?的評測用例:1≤T≤10^6,1≤K≤10^6,1≤n≤10^6。

AC代碼

import java.util.*;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {public static int gcd(int a,int b){return b==0?a:gcd(b,a%b);}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int k=scan.nextInt();HashMap<Integer,Integer> hp=new HashMap<>();int id=1;int l=1;int r=1;for(int i=1;i<=1000000+10;i++){l=i;i+=k;r=i;while(gcd(l,r)!=1)r++;i=r;hp.put(r,id);id++;}int t=scan.nextInt();for(int i=1;i<=t;i++){int n=scan.nextInt();while(!hp.containsKey(n))n++;System.out.println(hp.get(n));}scan.close();}
}

8.園丁

問題描述

小明是一位盡職盡責的園丁。這天他負責維護一棵樹,樹上有?n?個結點?1,2,…,n,根結點為?1,結點?i?的權值為?ai。

他需要更改一些結點的權值為任意正整數,使得對于任意一個至少有 2 個兒子結點的結點?i?滿足:任意兩個?i?的兒子結點的權值的乘積都不是完全平方數。

請問小明至少需要修改多少個結點的權值?

輸入格式

輸入共?n+1 行。 第一行為一個正整數?n。 第二行為?n?個由空格分開的正整數?a1,a2,…,an?。 后面?n?1 行,每行兩個正整數表示樹上的一條邊。

輸出格式

輸出共?1?行,一個整數表示答案。

樣例輸入

6
1 2 9 8 4 4
1 2
1 3
1 4
2 5
2 6

樣例輸出

2

樣例說明

其中一種方案:將結點?2,5 的權值分別修改為?3,2。

評測用例規模與約定

對于?20% 的評測用例,保證?n≤10^3。

對于?100% 的評測用例,保證?n≤10^5,1≤ai≤10^9。

9.分組

問題描述

小明班上有?n?名同學,老師準備按上一次考試的分數對同學們進行分組,第?i?名同學的分數為?ai?。老師希望把同學們分為盡可能多的小組,且滿足每個小組中的同學分數的最大值至少是最小值的兩倍。請問最多能分出多少個小組?如果把所有人分到同一組都不能滿足條件則輸出 0。

輸入格式

輸入共?2?行。 第一行為一個正整數?n。 第二行為?n?個由空格分開的正整數表示?a1,a2,…,an。

輸出格式

輸出共?1?行,一個整數表示答案。

樣例輸入

6
3 5 2 1 4 2

樣例輸出

3

樣例說明

其中一種分組方式:第一組?{a4,a1}={1,3},第二組?{a3,a2}={2,5},第三組?{a6,a5}={2,4}。

AC代碼?

貪心,由于最多可以有n / 2組(不可能1個人一組),所以可以先將數組排序,使用雙指針匹配,左指針從0開始,右指針從n/2開始,貪心地選取最小的值與右半部分匹配。

import java.util.*;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();int [] a=new int [n];for(int i=0;i<n;i++)a[i]=scan.nextInt();Arrays.sort(a);int ans=0;for(int l=0,r=n/2;r<n;r++){if(2*a[l]>a[r])continue;if(r>=n)break;l++;ans++;}System.out.println(ans);scan.close();}
}

10.喜糖擺放

問題描述

在過年時,藍橋村的孩子們充滿活力,他們化身為搗蛋鬼,挨家挨戶尋討喜糖。他們一共收到了?NN?顆糖,每顆糖的甜度各不相同,第?ii?顆糖的甜度為?AiAi?。

然而,如何分配這些喜糖卻成了一個令人困擾的問題,因為糖的數量不能完全平均分給孩子們。

藍橋村的村長察覺到了這個困難,于是說道:"我有一個問題,只要你們中有小朋友能解決,我就會提供足夠的喜糖,使得你們可以均分。"

問題陳述如下:

每次可以選擇將任意位置的糖果移到最后,求使得糖果按照升序排列所需的最小操作次數。

作為藍橋村最聰明的孩子之一,你能否嘗試解決這個問題呢?

輸入格式

第一行輸入一個整數?N(2≤N≤105)N(2≤N≤105)?表示糖果數量。

第二行輸入?NN?個整數?A1,A2,?,AN(1≤Ai≤109)A1?,A2?,?,AN?(1≤Ai?≤109)?表示糖果的甜度,數據保證?A1,A2,?,ANA1?,A2?,?,AN??各不相同。

輸出格式

輸出一個整數表示答案。

樣例輸入

5
1 3 2 4 5

樣例輸出

3

AC代碼

import java.util.*;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();int[] a=new int[n];int[] b=new int[n];for(int i=0;i<n;i++){a[i]=scan.nextInt();b[i]=a[i];}Arrays.sort(b);int j=0;for(int i=0;i<n;i++){if(a[i]==b[j]){j++;}}System.out.println(n-j);scan.close();}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80633.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【趙渝強老師】Memcached的路由算法

Memcached支持兩種不同方式的客戶端路由算法&#xff0c;即&#xff1a;求余數Hash算法和一致性Hash算法。下面分別進行介紹。 一、 求余數的路由算法 求余數Hash算法的客戶端路由是對插入數據的鍵進行求余數&#xff0c;根據余數來決定存儲到哪個Memcached實例。 視頻講解如…

NLP學習路線圖(一): 線性代數(矩陣運算、特征值分解等)

引言&#xff1a;語言與矩陣的奇妙邂逅 在自然語言處理&#xff08;NLP&#xff09;的魔法世界里&#xff0c;每個詞語都像被施了變形術的精靈&#xff0c;在數學的殿堂中翩翩起舞。當我們用"king - man woman queen"這樣的向量魔法破解語義密碼時&#xff0c;線性…

BUUCTF PWN刷題筆記(持續更新!!)

ciscn_2019_c_1 64位&#xff0c;沒有開啟保護。點進去沒發現明顯的漏洞函數&#xff0c;考慮泄露libc基地址的rop構造。先看看有多少gadget 估計也夠用了。puts函數只接受一個參數&#xff0c;觀看匯編看看用的哪個寄存器傳輸的參數。 用的是edi。但是我們怎么找到so的版本呢…

Java EE初階——線程安全

1. 線程的狀態 1. 線程狀態分類&#xff08;Thread.State 枚舉&#xff09; Java 定義了 6 種線程狀態&#xff0c;這些狀態均由 java.lang.Thread.State 枚舉表示&#xff1a; NEW&#xff08;新建&#xff09; 線程對象已創建&#xff0c;但尚未調用 start() 方法。此時線程…

Vue 3.0中響應式依賴和更新

響應式依賴和更新是Vue 3.0中最重要的機制&#xff0c;其核心代碼如下&#xff0c;本文將結合代碼對這個設計機制作出一些解釋。 // 全局依賴存儲&#xff1a;WeakMap<target, Map<key, Set<effect>>> const targetMap new WeakMap();// 當前活動的副作用函…

一、內存調優

一、內存調優 什么是內存泄漏 監控Java內存的常用工具 內存泄露的常見場景 內存泄露的解決方案 內存泄露與內存溢出的區別 內存泄露&#xff1a;在Java中如果不再使用一個對象&#xff0c;但是該對象依然在GC ROOT的引用鏈上&#xff0c;這個對象就不會被垃圾回收器回收&…

Linux /etc/rc.d/init.d/

在傳統的 SysV init 系統中&#xff0c;服務啟動腳本通常位于 /etc/rc.d/init.d/ 目錄下。這些腳本可以直接執行以啟動、停止或重啟服務&#xff0c;并且可以接受參數如 start, stop, status 等。 如果你想知道位于 /etc/rc.d/init.d/ 目錄下的某個腳本文件實際上指向哪里,如果…

S7 200 smart連接Profinet轉ModbusTCP網關與西門子1200PLC配置案例

控制要求&#xff1a;使用MODBUSTCP通信進行兩臺PLC之間的數據交換&#xff0c;由于改造現場不能改動程序&#xff0c;只留出了對應的IQ地址。于是客戶決定使用網關進行通訊把數據傳到plc。 1、讀取服務器端40001~40005地址中的數據&#xff0c;放入到VW200~VW208中&#xff1…

打破傳統倉庫管理困局:WMS如何重構出入庫全流程

引言 在制造業與零售業高速發展的今天&#xff0c;倉庫管理仍普遍面臨效率低、錯發漏發頻發、庫存數據滯后等痛點。人工登記導致30%的錯單率&#xff0c;貨位混亂讓揀貨耗時增加50%&#xff0c;而賬實不符引發的二次采購成本更吞噬著企業利潤。如何突破傳統管理桎梏&#xff1…

Text2SQL在Spark NLP中的實現與應用:將自然語言問題轉換為SQL查詢的技術解析

概述 SQL 仍然是當前行業中最受歡迎的技能之一 免責聲明&#xff1a;Spark NLP 中的 Text2SQL 注釋器在 v3.x&#xff08;2021 年 3 月&#xff09;中已被棄用&#xff0c;不再使用。如果您想測試該模塊&#xff0c;請使用 Spark NLP for Healthcare 的早期版本。 自新千年伊…

微服務項目->在線oj系統(Java版 - 5)

相信自己,終會成功 微服務代碼: lyyy-oj: 微服務 目錄 C端代碼 用戶題目接口 修改后用戶提交代碼(應用版) 用戶提交題目判題結果 代碼沙箱 1. 代碼沙箱的核心功能 2. 常見的代碼沙箱實現方式 3. 代碼沙箱的關鍵問題與解決方案 4. 你的代碼如何與沙箱交互&#xff1f; …

Vue3 Element Plus 中el-table-column索引使用問題

在 Element Plus 的 el-table 組件中&#xff0c;使用 scope.index 是不準確的。正確的索引屬性應該是 scope.$index。你的代碼需要調整為&#xff1a; vue 復制 下載 <el-button type"primary" size"default" text click"onModifyClick(scope…

Ubuntu20.04下使用dpkg方式安裝WPS后,將WPS改為中文界面方法

Ubuntu20.04下使用dpkg方式安裝WPS后&#xff0c;將WPS改為中文界面方法 說明方法 說明 Ubuntu20.04下使用dpkg方式安裝WPS后&#xff0c;打開WPS后&#xff0c;發現界面是英文的&#xff0c;如有需要可以按照下面的方法將其改為中文界面。 方法 cd /opt/kingsoft/wps-offic…

【??HTTPS基礎概念與原理?】??HTTPS vs HTTP:為什么現代網站必須用HTTPS?

以下是關于 HTTPS vs HTTP 的詳細對比分析&#xff0c;涵蓋安全性、性能差異及SEO影響&#xff0c;幫助您全面理解為何現代網站必須采用HTTPS&#xff1a; 一、安全性對比&#xff1a;HTTPS 如何解決 HTTP 的致命缺陷 1. HTTP 的安全隱患 ? 明文傳輸&#xff1a;HTTP 數據以明…

算法刷題(Java與Python)1.二分查找

目錄 二分查找 思路 總體 細節 問題一&#xff0c;為什么循環的條件是left<right ,為什么要有等號呢 問題二&#xff0c;為什么中間值是left (right - left) / 2 問題三&#xff0c;為什么最后返回的是左邊的值呢 情況 1&#xff1a;target 存在于數組中 情況 2&a…

芯片生態鏈深度解析(二):基礎設備篇——人類精密制造的“巔峰對決”

【開篇&#xff1a;設備——芯片工業的“劍與盾”】 當ASML的EUV光刻機以每秒5萬次激光脈沖在硅片上雕刻出0.13nm精度的電路&#xff08;相當于在月球表面精準定位一枚二維碼&#xff09;&#xff0c;當國產28nm光刻機在華虹產線實現“從0到1”的突破&#xff0c;這場精密制造…

MongoTemplate 基礎使用幫助手冊

前言 MongoDB 是一種流行的 NoSQL 數據庫&#xff0c;適合存儲大量的非結構化數據。MongoTemplate 是 Spring Data MongoDB 中的一個核心組件&#xff0c;它提供了一組豐富的 API 來與 MongoDB 進行交互。它封裝了許多常見的數據庫操作&#xff0c;使開發者能夠輕松執行 CRUD 操…

psotgresql18 源碼編譯安裝

環境&#xff1a; 系統&#xff1a;centos7.9 數據庫&#xff1a;postgresql18beta1 #PostgreSQL 18 已轉向 DocBook XML 構建體系&#xff08;SGML 未來將被棄用&#xff09;。需要安裝 XML 工具鏈&#xff0c;如下&#xff1a; yum install -y docbook5-style-xsl libxsl…

C++編程起步項目

員工信息管理系統 需求 Employee.h #pragma once#include<iostream> #include<string>using namespace std;class Employee { public:int id; // 編號string name; // 姓名string position; // 崗位int deptId; // 部門編號Employee();Employee(int id, string n…

Linux的MySQL頭文件和找不到頭文件問題解決

頭文件 #include <iostream> #include <mysql_driver.h> #include <mysql_connection.h> #include <cppconn/statement.h> #include <cppconn/resultset.h> #include <cppconn/prepared_statement.h> #include <cppconn/exception.h&g…