❶ 藍橋杯省賽(C語言)一般考什麼
還是跟選拔賽一樣的題型
考的是演算法類的題目
❷ 演算法訓練 操作格子 用java寫 ,藍橋杯上的一題。請注意別超時!
dty@ubuntu:~$ cat Zhi.java
importjava.util.*;
publicclassZhi
{
publicstaticvoidmain(String[]args)
{
Scanners=newScanner(System.in);
intn=s.nextInt();
intm=s.nextInt();
inta[]=newint[n];
for(inti=0;i<n;i++)
{
a[i]=s.nextInt();
}
intp,x,y;
for(inti=0;i<m;i++)
{
p=s.nextInt();
x=s.nextInt();
y=s.nextInt();
if(p==1)
{
a[x-1]=y;
}
if(p==2)
{
intsum=0;
for(intj=x-1;j<y;j++)sum+=a[j];
System.out.println(sum);
}
if(p==3)
{
intmax=a[x-1];
for(intj=x-1;j<y;j++)max=a[j]>max?a[j]:max;
System.out.println(max);
}
}
}
}
dty@ubuntu:~$ javac Zhi.java
dty@ubuntu:~$ java Zhi
4 3
1 2 3 4
2 1 3
6
1 4 3
3 1 4
3
❸ 藍橋杯的演算法題k好數是什麼意思,完全不明白要干什麼,不要代碼,解釋這題是干嗎的
就是要你求滿足以下條件的序列的個數
1.有L個數
2.每個數在0到k的范圍內
3.相鄰的數差不等於一
4.第一個數不是0
方法就是遞推,f[i][j]表示共i位最後一位為j時的方案數。
❹ 藍橋杯上的一題,題目為排列數,用了暴力演算法超時,請問該怎麼處理,謝謝!
不用擔心的,看看別人是怎麼學習單片機的,加油。 最近論壇上發了一個連載帖子——吳鑒鷹單片機實戰項目精講,因此受到不少網友的關注,在這里吳鑒謝謝各位網友的支持、關心和信任。 在帖子中留了幾個群號,有兩千多讀者加了群,通過QQ向我詢問了很多問題,如果在工作不是太忙的時候我看到了就會回答,但是有時候做項目太忙就沒時間解答。 為此,在這里應群內成員以及一些網友的要求,專門寫一篇文章來針對這些問題做一個總結。希望能為大家的疑惑有一點點幫助就足以。不足之處,也希望大家客觀指出,君子和而不同。 1、學習單片機有用嗎? 有很多初學者有這樣的困惑,單片機初學者感覺入門很難,學著學著,就會產生這樣的疑問——自己辛辛苦苦學習單片機,將來有用嗎? 單片機只是一個工具,重要的還是思想,有了自己的想法,電子行業地域遼闊,隨便你闖。單片機這個切入點入手還是不錯的,可以讓你盡快進入電子殿堂的大門,如果你還在上學,不要眼睛裡面只盯著暫時的薪水,哪怕是畢業兩三年的也一樣。重要的是掌握程度和對技術的理解程度,有句話叫「水到渠成」,到時候再去研究工資的事情也不晚。 2、學習嵌入式編程有必要從51單片機開始嗎? 我原本來在讀大學的時候,有很多同學聽說學習ARM很牛逼,於是就跑到圖書館借了一兩本關於ARM的書,學一兩天後發現跟自己想的不太像,於是學著學著就慢慢放棄了。所以我總結一下,與其邁很大的步子,不如放慢腳步一步步走。從最基本的做起,一步步走,等單片機學會之後再進行像ARM,DSP之類高端處理器的運用,也就能得心應手了,如果想一口吃成一個胖子,只怕最後沒胖起來,倒把自己給噎死了! 3、會用高端處理器就牛了嗎? 不少網友問我:是不是學會了ARM、嵌入式操作系統就會很牛?是不是單片機就是運用在低檔產品上,ARM做出來的產品就高端了。 首先,從本質上說,是同一類東西,都是嵌入式應用方面的主力。十八般兵器,沒有優劣之分,只是在乎持兵器的人修為高低,當年解放軍憑借小米加步槍不也取得了抗戰勝利。 微處理器,單片機、DSP、FPGA、ARM,每一種都有自己的側重點,都具備自己的優勢和劣勢。 單片機:技術比較成熟,運用在工控領域比較多,但進行嵌入式應用顯得太龐大,因而派生出ARM單片機進行高端應用,可以進行操作系統的移植,但是現在一些高端單片機也可以移植操作系統,單片機跟ARM並沒有什麼本質的區別。 DSP:是數據處理的縮寫。也可以做控制運用,它的優勢是運算,主要用在運算量大的領域,如數字信號處理,圖像處理,視屏處理,導彈雷達上也等等。如果要用的好,需要學會很多高深的演算法,需要有較強的數學功底。 FPGA:可編程邏輯陣列的縮寫。實際上就是做一個晶元,用軟體實現它的內部連接,達到用軟體的方法實現硬體的目標。是用硬體實現的一種方法。是早期單片機(功能簡單的邏輯應用)的現代實現方法。 總結:一個嵌入式軟體工程師,其實核心競爭力不是你會運用什麼晶元,當你會了一兩種以後,再學其他的,就會覺得很容易了。一個真正的有競爭力的工程師,應該是具備良好的編程習慣,編程思路,還應該具備扎實的數學功底。只有把握核心的東西,才能走的更遠。 4、單片機行業技術研發有前途嗎? 這也是初學者最為關心的一個話題,單片機行業的技術研發將來前途如何? 著名的高爾夫球手,老虎伍茲說過一句話:我只需成為高爾夫數一數二的高手,錢自然會追著我來。 單片機技術研發,也就是一個類型的職業崗位,同樣叫做「單片機工程師」,能力、經驗、學歷,參差不齊,因此待遇肯定也不盡相同。 高待遇者,年薪數百萬也有,低收入者,養家糊口都難。 只有倒閉的企業,沒有倒閉的行業! 不是行業沒有前景,只能反思自己為何沒有足夠的優秀。 5、單片機技術研發太苦太累,值得去堅持嗎? 在論壇里看到很多人在抱怨:現在電子行業的研發做起來太累,待遇又不是很好,感覺沒什麼出路。 既然我們選擇了單片機行業,就堅持做下去,不要輕信別人講的:單片機研發工程師沒有前途,太苦太累。 學好單片機你至少可以找一份技術性的工作,就算目前累一點,至少你可以看到希望,隨著自己經驗的積累,未來的路會越走越寬!至少可以坐在辦公室裡面,有自由的時間可以支配。 你知道那種專業課沒學好,只能去車間做一線工人的感覺嗎?坐在車間里像一個機器人一樣每天重復同樣的工作嗎?你喜歡過那種一點自由都沒有,在流水線上忙碌著,連上廁所時間都沒有的工作嗎?我相信沒有人喜歡! 所有不要被一些工作了幾年的工程師的話語所迷惑,說做技術很苦,拿的錢又少,當你真正有一天想去做技術,發現原來因為自己缺少知識的積累,沒有公司願意要你。 簡單地分享了自己對單片機領域一些問題的看法,歡迎同行積極分享自己的心得,能讓更多初學者少走彎路,擺正心態進行單片機的學習。
❺ 演算法訓練 2的次冪表示(藍橋杯C++寫法)
這里用了遞歸的演算法,具體思路是:將輸入的數b先拆分成2的n次冪的和,再將各個冪次方(即指數)拆分成2的n次冪的和……知道冪次方為0或1為止。很明顯,這是函數遞歸的思想。
大佬的思路是,先判定b是否滿足要求(冪次方為1或0),如果是,輸出2(0)或2,如果不是,從最接近b的2的n次方開始分解,分解完再減去2的n次方,再從剩下的數中開始分解......直到滿足要求為止。
❻ 藍橋杯演算法訓練 java演算法 表達式求值
這兩天看到的內容是關於棧和隊列,在棧的模塊發現了Dijkstra雙棧算術表達式求值演算法,可以用來實現計算器類型的app。
編程語言系統一般都內置了對算術表達式的處理,但是他們是如何在內部實現的呢?為了了解這個過程,我們可以自行搭建一套簡易的算術表達式處理機制,這里就用到棧特性和本篇提到的Dijkstra演算法。
概述:
算術表達式可能是一個數、或者是由一個左括弧、一個算術表達式、一個運算符、另一個算術表達式和一個右括弧組成的表達式。為了簡化問題,這里定義的是未省略括弧的算術表達式,它明確地說明了所有運算符的操作數,形式如下:
(1+((2+3)*(4*5)))
思路:
表達式由括弧、運算符和操作數構成,我們根據以下4中情況從左至右逐個將這些實體送入棧處理:
1.將操作數壓入操作數棧;
2.將運算符壓入運算符棧;
3.忽略左括弧;
4.在遇到右括弧時,彈出一個運算符,彈出所需數量的操作數,並將運算後的結果壓入操作數棧;
在處理完最後一個右括弧時,操作數棧上只會剩下一個值,它就是表達式的計算結果。這種方法咋一看難理解,但要證明它能計算得到正確的值很簡單:
每當演算法遇到一個括弧包圍,並由一個運算符和兩個操作數組成的子式時,他都將運算符和操作數運算結果壓入操作數棧。這樣的結果就像是在輸入中用這個值代替了該子表達式,因此用這個值代替子表達式得到的結果和原表達式相同。我們可以反復應用這個規律並得到一個最終值。
例如:
(1+((2+3)*(4*5)))
(1+(5*(4*5)))
(1+(5*20))
(1+100)
101
代碼實現:
這里我採用C#來實現,最終運行效果完全符合預期,證明了此演算法的正確性,代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Evaluate
{
class Program
{
static void Main(string[] args)
{
string testExpress = "(1+((2+3)*(4*5)))";
Console.WriteLine(Evaluate(testExpress));
}
//DijkStra
static double Evaluate(string express)
{
var expressChars = express.ToArray();
Stack ops = new Stack();
Stack vals = new Stack();
if (express.Length > 0)
{
foreach (var opt in expressChars)
{
switch (opt)
{
case '+':
case '-':
case '*':
case '/':
ops.Push(opt);
break;
case ')':
var op = ops.Pop();
var v = vals.Pop();
switch (op)
{
case '+':
v += vals.Pop();
break;
case '-':
v = vals.Pop() - v;
break;
case '*':
v *= vals.Pop();
break;
case '/':
v = vals.Pop() / v;
break;
}
vals.Push(v);
break;
case ' ':
case '(':
break;
default:
vals.Push(double.Parse(opt.ToString()));
break;
}
}
return vals.Pop();
}
return double.MaxValue;
}
}
}
總結:
Dijkstra演算法充分利用了棧的特性,具備較高的執行效率,經過進一步的擴充修改,就完全可以實現具備科學計算功能的復雜計算類app。如果大家還有更好的,更適用的演算法,歡迎在評論中給出地址,謝謝。
轉載
❼ 藍橋杯的比賽項目
1、組別
個人競賽分為:c/c++本科A組,c/c++本科B組,c/c++高職高專組,java本科A組, java本科B組,java高職高專組,嵌入式設計與開發大學組,嵌入式設計與開發研究生組,單片機設計與開發本科組,單片機設計與開發高職高專組,電子設計與開發本科組,電子設計與開發高職高專組共12個組別。每位選手只能參加其中一個組別的競賽。
2、時長
軟體比賽:4小時,全程封閉。
電子類比賽:5小時,全程封閉。
3、形式
軟體類:全程機考。
選手機器通過區域網連接到各個分賽區的競賽伺服器。
選手答題過程中無法訪問互聯網,也不允許使用本機以外的資源(如USB連接)
以「伺服器-瀏覽器」方式發放試題、回收選手作答。
電子類:動手操作。
4、參賽選手機器環境
X86 兼容機器,內存不小於1G,硬碟不小於60G
Windows NT 內核系統(WindowsXP, Windows2000等)
c/c++ 開發環境:
Dev-cpp 5.4.0 支持ANSI C,ANSIC++,STL
c/c++ API 幫助文檔(中文,chm格式)
Java 開發環境:
JDK 1.6
Eclipse Helios for JavaSE
API 幫助文檔(中文,chm格式)
5、題目形式
軟體類競賽題目完全為客觀題型,選手所提交作答的運行結果為主要評分依據。
(1)填空題
題目為若干具有一定難度梯度、分值不等的結果填空題或代碼完善填空題。
結果填空題
題目描述一個具有確定解的問題。要求選手對問題的解填空。
不要求解題過程,不限制解題手段,只要求填寫確定的結果。
代碼填空題
題目描述一個具有確定解的問題。
題目同時給出該問題的某一解法的代碼,但其中有缺失部分。
要求選手讀懂代碼邏輯,對其中的空缺部分補充代碼,使整段代碼完整。
只填寫空缺部分,不要填寫完整句子。
(2)編程題
題目為若干具有一定難度梯度、分值不等的編程題目。這些題目的要求明確、答案客觀。
題目一般要用到標准輸入和輸出。
要求選手通過編程,對給定的標准輸入求解,並通過標准輸出,按題目要求的格式輸出解。題目一般會給出示例數據。
一般題目的難度主要集中於對演算法的設計和邏輯的組織上。理論上,選手不可能通過猜測或其它非編程的手段獲得問題的解。
選手給出的解法應具有普遍性,不能只適用於題目的示例數據(當然,至少應該適用於題目的示例數據)。
為了測試選手給出解法的性能,評分時用的測試用例可能包含大數據量的壓力測試用例,選手選擇演算法時要充分考慮可行性的問題。
6、涉及知識
Java高職高專組
解題所涉及的知識:基本語法、面向對象、網路編程、介面、集合、IO、多線程、內部類、異常。(數據結構、swing等圖形界面不涉及,不涉及html、JSP、Tomcat、開源框架等web開發方面,不涉及JDBC、SQL等資料庫編程方面)
解題允許使用的特性:JDK1.5支持的全部特性
Java本科B組
解題所涉及的知識:Java高職高專組全部知識 + 數據結構(高校《數據結構》教材中出現的經典結構,及其通過組合、變形、改良等方法創造出的變種)
解題允許使用的特性:同java高職高專組
Java本科A組
解題所涉及的知識:Java本科B組全部知識 + 設計模式,反射,XML,多核與並發,測試理論,Swing界面。
解題允許使用的特性:同java高職高專組
c/c++高職高專組
解題所涉及的知識:結構、數組、指針、標准輸入輸出、文件操作、遞歸
(在代碼填空中不會出現c++知識,不會出現ANSI C之外的windows API調用)
解題允許使用的特性:選手可以使用c風格或c++風格或混合風格解答編程大題。
允許使用ANSI C++特性。允許使用STL類庫。
(不允許使用MFC類庫,ATL類庫)
c/c++本科B組
解題所涉及的知識:c/c++高職高專組全部知識 + 數據結構、函數指針、位運算
解題允許使用的特性:同 c/c++高職高專組
c/c++本科A組
解題所涉及的知識:c/c++本科B組全部知識 + 函數模板、復雜宏、匯編知識
解題允許使用的特性:同 c/c++高職高專組
單片機設計與開發(本科組,高職高專組)
模擬、數字電路,感測器及MCS51系列單片機的相關知識,常用儀器使用方面的知識,程序編譯調試和下載軟體使用方面的知識。
嵌入式設計與開發(大學組)
模擬電路,數字電路,感測及STM32F103 MCU的相關知識,常用儀器使用方面的知識,Keil MDK4.10軟體方面的知識。
電子設計與開發(本科組,高職高專組)
模擬電路,數字電路,感測器及電力電子等相關方面的相關知識及應用,電子元器件知識及應用,常用儀器儀表使用方面的知識。
7、評分
軟體類
填空題:答案唯一。
程序填空題:按選手填寫的代碼代入程序中能否得出正確結果為判據。
編程大題:主要以選手所提交的程序的運行結果為依據(大於90%);同時會參考選手程序的編碼風格、邏輯性、可讀性等方面(小於10%)。
單片機和嵌入式類
硬體設計約佔25%,軟體編程及調試約佔60%,其他約佔15%。
電子設計類
硬體設計約佔45%,裝調約佔35%,其他約佔20%。
8、注意事項
(1)選手必須符合參賽資格,不得弄虛作假。資格審查中一旦發現問題,則取消其報名資格;競賽過程中發現問題,則取消競賽資格;競賽後發現問題,則取消競賽成績,收回獲獎證書及獎品等,並在大賽官網上公示。
(2)參賽選手應遵守競賽規則,遵守賽場紀律,服從大賽組委會的指揮和安排,愛護競賽賽場地的設備。
❽ JAVA藍橋杯題庫演算法訓練
不知道你在說什麼,你到底要幹嘛阿?
❾ 求藍橋杯習題 演算法訓練 反置數解法
#include <stdio.h>
#include <math.h>
int getTheNumber(int num)
{
int number=1,i,j=1,flag=0;
if(!num)
return 0;
while(num)
{
i=num%10;
if(i||flag)
{
if(!flag)
{
number=i;
}
else
{
number=number*10+i;
}
flag=1;
}
num/=10;
}
return number;
}
main()
{
int n,m;
scanf("%d%d",&n,&m);
printf("%d\n",getTheNumber(getTheNumber(n)+getTheNumber(m)));
return 0;
}