第一篇:算法和算法描述教案
一、教學(xué)內(nèi)容:算法和算法的描述(選修1算法與程序設(shè)計(jì) 廣東教育出版社)
二、教學(xué)課時(shí):1課時(shí)
三、教學(xué)地點(diǎn):計(jì)算機(jī)室2
四、教學(xué)目標(biāo):
1、知識(shí)目標(biāo)
(1)明白算法的概念,理解算法的特征。(2)掌握算法描述的三種方法,能看懂流程圖。(3)了解算法的意義,找出三種算法描述的優(yōu)缺點(diǎn)。
2、技能目標(biāo)
(1)知道在什么場合應(yīng)該用什么算法描述。
(2)能對(duì)算法和算法的描述正確定位,能用算法解決實(shí)際問題,為學(xué)習(xí)后面的程序設(shè)計(jì)打下基礎(chǔ)。
3、情感目標(biāo)
(1)能把現(xiàn)實(shí)社會(huì)中的問題用算法描述出來,培養(yǎng)學(xué)生們的合作精神和想象能力,以提高學(xué)生們的信息素養(yǎng)。
五、教學(xué)方法:任務(wù)驅(qū)動(dòng)法
六、教學(xué)重點(diǎn):
算法的概念、描述算法的三種方法。
七、教學(xué)難點(diǎn):
用流程圖描述算法。
八、教學(xué)過程
1.激發(fā)興趣、創(chuàng)設(shè)情景
這節(jié)課內(nèi)容主要是一些概念和理論,而算法的概念和理論都太抽象,講起來非常的枯燥乏味,那么就要把這些抽象的東西變得通俗易懂,使學(xué)生能輕松而又愉快的接受并理解。
舉出一個(gè)例子如炒土豆絲如何做?引導(dǎo)學(xué)生們一步步說出步驟,最后教師總結(jié):算法就是解決問題的方法和步驟。在以后的編程中也要記住了,有些步驟是可以顛倒的,不影響程序的結(jié)果;但是有些一但顛倒了那最終的結(jié)果也就全變了。
2.講.解
激發(fā)學(xué)生的興趣后對(duì)算法、算法的特征(確定性、有窮性)進(jìn)行講解,注意運(yùn)用生活中的實(shí)例,以便讓學(xué)生們理解。
講述算法的三種描述方法:自然語言、流程圖、偽代碼。學(xué)生們比較熟悉的是自然語言,陌生難理解的是流程圖和偽代碼。
先帶學(xué)生們了解自然語言,然后講偽代碼,講完偽代碼后,引導(dǎo)學(xué)生們?nèi)绾伟堰@些程序用流程圖表示出來。流程圖的基本圖形及其功能
給出一個(gè)程序,讓學(xué)生們先讀這個(gè)程序,再用流程圖表示這個(gè)程序如:
Private Sub Command1_Click()a = InputBox(“輸入數(shù)字”)If a Mod 2 = 0 Then Print a & “是偶數(shù)” Else Print a & “是奇數(shù)” End If End Sub 學(xué)生們自學(xué)后,由教師引導(dǎo)發(fā)現(xiàn)這是一個(gè)判斷奇偶數(shù)的程序,找一個(gè)學(xué)生展示他的流程圖,然后大家共同檢查這個(gè)流程圖是否正確。
九、課堂作業(yè) 再給學(xué)生們一個(gè)程序,讓學(xué)生們讀并且在word中畫出流程圖,然后教到主機(jī)上。
十、課后反思:
在本節(jié)課中進(jìn)行任務(wù)驅(qū)動(dòng)式教學(xué),充分發(fā)揮學(xué)生的主觀能動(dòng)性。同時(shí)這節(jié)課內(nèi)容多,而且難以理解,練習(xí)生活中的實(shí)例,既可以激發(fā)學(xué)生們的興趣,又有助于知識(shí)的遷移和內(nèi)化。
第二篇:算法、流程圖教案
算法、流程圖
教學(xué)目標(biāo):
①了解算法的含義、算法的思想.
②理解程序框圖的三種基本邏輯結(jié)構(gòu):順序、選擇、循環(huán).
③理解幾種基本算法語句—輸入語句、輸出語句、賦值語句、條件語句、循環(huán)語句的含義.考情分析:
①高考對(duì)本章的考查主要以填空題的形式出現(xiàn),單獨(dú)命題以考查考生對(duì)流程圖的識(shí)別能力為主,對(duì)算法語言的閱讀理解能力次之。
② 算法可結(jié)合在任何試題中進(jìn)行隱性考查,因?yàn)樗惴ㄋ枷朐谄渌麛?shù)學(xué)知識(shí)中的滲透是課標(biāo)的基本要求,常見的與其他知識(shí)的結(jié)合有分段函數(shù),方程,不等式,數(shù)列,統(tǒng)計(jì)等知識(shí)綜合,以算法為載體,以算法的語言呈出,實(shí)質(zhì)考查其他知識(shí)。
1.(必修3P11練習(xí)2改編)下面的流程圖表示了一個(gè)____________________的算法.
2.(必修3P34復(fù)習(xí)7改編)圖中的偽代碼運(yùn)行后輸出的結(jié)果為________.
3.為了在運(yùn)行如下所示的偽代碼后輸出的y值為16,應(yīng)輸入的整數(shù)x=________.S←0Read xIf x<0 Thena←x2 y←?x+1?For I From 1 To 9 Step 2Else(第3題圖)
S←S+a×I
(第4題圖)2 y←x-2 a←a×?-1?End IfEnd ForPrint yPrint S4.(必修3P24習(xí)題7改編)閱讀偽代碼,若使這個(gè)算法執(zhí)行的結(jié)果是-1+3-5+7-9的計(jì)算結(jié)果,則a的初始值x是________.
1.算法: 2.流程圖:
流程圖是由一些圖框和流程線組成的,其中圖框表示各種操作的類型,圖框中的文字和符號(hào)表示操作的內(nèi)容,流程線表示操作的先后次序.
3.構(gòu)成流程圖的圖形符號(hào)及其作用 起止框用““” ” 輸入、輸出框用“
” 處理框用“
” 判斷框用4.基本的算法結(jié)構(gòu)(順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu))5.偽代碼
賦值語句:
用符號(hào)“x←y”表示 輸入語句:“Read a,b” 輸出語句:“Print x” 條件語句: If A Then
B Else
C End If 其中A表示判斷的條件,B表示滿足條件時(shí)執(zhí)行的操作內(nèi)容,C表示不滿足條件時(shí)執(zhí)行的操作內(nèi)容,End If表示條件語句結(jié)束.
循環(huán)語句:“For”語句和“While”語句.“For”語句的一般形式為For I From “初值” To “終值” Step “步長” ? End For.例1 寫出下列用偽代碼描述的算法執(zhí)行后的結(jié)果. 下列用條件語句描述的算法: Read x If x≤10 Then
p←0.35x Else
p←3.5+0.7(x-10)End If Print p 若輸入x=18,則p=________.例2 如圖,如果執(zhí)行下面流程圖,那么輸出的S等于________.
反饋練習(xí)
1.(2011·福建文)下列用偽代碼描述的算法執(zhí)行后的結(jié)果是________. Read a,ba=1If a>b Thenb=2 m←aa=a+b
Else
m←bPrint aEndEnd If
Print m2.(2011·江蘇)根據(jù)如圖所示的偽代碼,當(dāng)輸入a,b分別為2,3時(shí),最后輸出的m的值為________.3.(2011·天津文)閱讀左下邊的程序框圖,運(yùn)行相應(yīng)的程序,若輸入x的值為-4,則輸出y的值為________.
4.(2011·湖南文)若執(zhí)行如下圖所示的框圖,輸入x1=1,x2 = 2, x3 = 4, x4 = 8,則輸出的數(shù)等于________.
第三篇:算法案例教案
課題:§1.3算法案例
第1課時(shí) 輾轉(zhuǎn)相除法與更相減損術(shù)、秦九韶算法
一、教學(xué)目標(biāo):
根據(jù)課標(biāo)要求:在學(xué)生學(xué)習(xí)了算法的初步知識(shí),理解了表示算法的算法步驟、程序框圖和程序三種不同方式以后,再結(jié)合典型算法案例,讓學(xué)生經(jīng)歷設(shè)計(jì)算法解決問題的全過程,體驗(yàn)算法在解決問題中的重要作用,體會(huì)算法的基本思想,提高邏輯思維能力,發(fā)展有條理地思考與數(shù)學(xué)表達(dá)能力。制定以下三維目標(biāo):
1、知識(shí)與技能
理解算法案例的算法步驟和程序框圖.2、過程與方法:
引導(dǎo)學(xué)生得出自己設(shè)計(jì)的算法程序.3、情感態(tài)度與價(jià)值觀:
體會(huì)算法的基本思想,提高邏輯思維能力,發(fā)展有條理地思考與數(shù)學(xué)表達(dá)能力.二、重點(diǎn)與難點(diǎn):
重點(diǎn):引導(dǎo)學(xué)生得出自己設(shè)計(jì)的算法步驟、程序框圖和算法程序.解決策略:通過分析解決具體問題的算法步驟來引導(dǎo)學(xué)生寫出算法,根據(jù)算法畫出程序框圖,再根據(jù)框圖用規(guī)范的語言寫出程序。
難點(diǎn):體會(huì)算法的基本思想,提高邏輯思維能力,發(fā)展有條理地思考與數(shù)學(xué)表達(dá)能力.解決策略:讓學(xué)生能嚴(yán)謹(jǐn)?shù)匕凑兆约菏浅绦蚩驁D寫出程序。
三、學(xué)法與教學(xué)用具:
1、學(xué)法:直觀感知、操作確認(rèn)。
2、教學(xué)用具:多媒體。
四、教學(xué)過程
(一)引入課題
大家喜歡打乒乓球吧,由于東、西方文化及身體條件的不同,西方人喜歡橫握拍打球,東方人喜歡直握拍打球,對(duì)于同一個(gè)問題,東、西方人處理問題方式是有所不同的.在小學(xué),我們學(xué)過求兩個(gè)正整數(shù)的最大公約數(shù)的方法:先用兩個(gè)數(shù)公有的質(zhì)因數(shù)連續(xù)去除,一直除到所得的商是互質(zhì)數(shù)為止,然后把所有的除數(shù)連乘起來.當(dāng)兩個(gè)數(shù)公有的質(zhì)因數(shù)較大
時(shí)(如與6 105),使用上述方法求最大公約數(shù)就比較困難.下面我們介紹兩種不同的算法——輾轉(zhuǎn)相除法與更相減損術(shù),由此可以體會(huì)東、西方文化的差異.(二)研探新知
(1)怎樣用短除法求最大公約數(shù)?
(2)怎樣用窮舉法(也叫枚舉法)求最大公約數(shù)?(3)怎樣用輾轉(zhuǎn)相除法求最大公約數(shù)?(4)怎樣用更相減損術(shù)求最大公約數(shù)? 討論結(jié)果:(1)短除法
求兩個(gè)正整數(shù)的最大公約數(shù)的步驟:先用兩個(gè)數(shù)公有的質(zhì)因數(shù)連續(xù)去除,一直除到所得的商是兩個(gè)互質(zhì)數(shù)為止,然后把所有的除數(shù)連乘起來.(2)窮舉法(也叫枚舉法)
窮舉法求兩個(gè)正整數(shù)的最大公約數(shù)的解題步驟:從兩個(gè)數(shù)中較小數(shù)開始由大到小列舉,直到找到公約數(shù)立即中斷列舉,得到的公約數(shù)便是最大公約數(shù).(3)輾轉(zhuǎn)相除法
輾轉(zhuǎn)相除法求兩個(gè)數(shù)的最大公約數(shù),其算法步驟可以描述如下: 第一步,給定兩個(gè)正整數(shù)m,n.第二步,求余數(shù)r:計(jì)算m除以n,將所得余數(shù)存放到變量r中.第三步,更新被除數(shù)和余數(shù):m=n,n=r.第四步,判斷余數(shù)r是否為0.若余數(shù)為0,則輸出結(jié)果;否則轉(zhuǎn)向第二步繼續(xù)循環(huán)執(zhí)行.如此循環(huán),直到得到結(jié)果為止.這種算法是由歐幾里得在公元前300年左右首先提出的,因而又叫歐幾里得算法.(4)更相減損術(shù)
我國早期也有解決求最大公約數(shù)問題的算法,就是更相減損術(shù).《九章算術(shù)》是中國古代的數(shù)學(xué)專著,其中的“更相減損術(shù)”也可以用來求兩個(gè)數(shù)的最大公約數(shù),即“可半者半之,不可半者,副置分母、子之?dāng)?shù),以少減多,更相減損,求其等也.以等數(shù)約之.”翻譯為現(xiàn)代語言如下:
第一步,任意給定兩個(gè)正整數(shù),判斷它們是否都是偶數(shù),若是,用2約簡;若不是,執(zhí)行第二步,以較大的數(shù)減去較小的數(shù),接著把所得的差與較小的數(shù)比較,并以大數(shù)減小數(shù),繼續(xù)這個(gè)操作,直到所得的數(shù)相等為止,則這個(gè)數(shù)(等數(shù))或這個(gè)數(shù)與約簡的數(shù)的乘積就是所求的最大公約數(shù).(三)范例分析
例1 用輾轉(zhuǎn)相除法求8 251與6 105的最大公約數(shù),寫出算法分析,畫出程序框圖,寫出算法程序.解:用兩數(shù)中較大的數(shù)除以較小的數(shù),求得商和余數(shù):8 251=6 105×1+2 146.由此可得,6 105與2 146的公約數(shù)也是8 251與6 105的公約數(shù),反過來,8 251與6 105的公約數(shù)也是6 105與2 146的公約數(shù),所以它們的最大公約數(shù)相等.對(duì)6 105與2 146重復(fù)上述步驟:6 105=2 146×2+1 813.同理,2 146與1 813的最大公約數(shù)也是6 105與2 146的最大公約數(shù).繼續(xù)重復(fù)上述步驟: 2 146=1 813×1+333,1 813=333×5+148,333=148×2+37,148=37×4.最后的除數(shù)37是148和37的最大公約數(shù),也就是8 251與6 105的最大公約數(shù).這就是輾轉(zhuǎn)相除法.由除法的性質(zhì)可以知道,對(duì)于任意兩個(gè)正整數(shù),上述除法步驟總可以在有限步之后完成,從而總可以用輾轉(zhuǎn)相除法求出兩個(gè)正整數(shù)的最大公約數(shù).算法分析:從上面的例子可以看出,輾轉(zhuǎn)相除法中包含重復(fù)操作的步驟,因此可以用循環(huán)結(jié)構(gòu)來構(gòu)造算法.算法步驟如下:
第一步,給定兩個(gè)正整數(shù)m,n.第二步,計(jì)算m除以n所得的余數(shù)為r.第三步,m=n,n=r.第四步,若r=0,則m,n的最大公約數(shù)等于m;否則,返回第二步.程序框圖如右圖: 程序: INPUT m,n DO r=m MOD n m=n n=r LOOP UNTIL r=0 PRINT m
END 例2 用更相減損術(shù)求98與63的最大公約數(shù).解:由于63不是偶數(shù),把98和63以大數(shù)減小數(shù),并輾轉(zhuǎn)相減,如下圖所示.98-63=35 63-35=28 35-28=7 28-7=21 21-7=14 14-7=7 所以,98和63的最大公約數(shù)等于7.前面我們學(xué)習(xí)了輾轉(zhuǎn)相除法與更相減損術(shù),現(xiàn)在我們來學(xué)習(xí)一種新的算法:秦九韶算法.(1)怎樣求多項(xiàng)式f(x)=x+x+x+x+x+1當(dāng)x=5時(shí)的值呢?
一個(gè)自然的做法就是把5代入多項(xiàng)式f(x),計(jì)算各項(xiàng)的值,然后把它們加起來,這時(shí),我們一共做了1+2+3+4=10次乘法運(yùn)算,5次加法運(yùn)算.另一種做法是先計(jì)算x的值,然后依次計(jì)算x·x,(x·x)·x,((x·x)·x)·x的值,這樣每次都可以利用上一次計(jì)算的結(jié)果,這時(shí),我們一共做了4次乘法運(yùn)算,5次加法運(yùn)算.第二種做法與第一種做法相比,乘法的運(yùn)算次數(shù)減少了,因而能夠提高運(yùn)算效率,對(duì)于計(jì)算機(jī)來說,做一次乘法運(yùn)算所用的時(shí)間比做一次加法運(yùn)算要長得多,所以采用第二種做法,計(jì)算機(jī)能更快地得到結(jié)果.(2)上面問題有沒有更有效的算法呢?我國南宋時(shí)期的數(shù)學(xué)家秦九韶(約1202~1261)在他的著作《數(shù)書九章》中提出了下面的算法:
把一個(gè)n次多項(xiàng)式f(x)=anx+an-1x+?+a1x+a0改寫成如下形式: f(x)=anx+an-1x+?+a1x+a0 =(anx+an-1x+?+a1)x+ a0 =((anx+an-1x+?+a2)x+a1)x+a0 =?
=(?((anx+an-1)x+an-2)x+?+a1)x+a0.求多項(xiàng)式的值時(shí),首先計(jì)算最內(nèi)層括號(hào)內(nèi)一次多項(xiàng)式的值,即v1=anx+an-1,然后由內(nèi)向外逐層計(jì)算一次多項(xiàng)式的值,即 v2=v1x+an-2,n-2n-3n-1n-2nn-1n
n-1
222
5432
v3=v2x+an-3,?
vn=vn-1x+a0,這樣,求n次多項(xiàng)式f(x)的值就轉(zhuǎn)化為求n個(gè)一次多項(xiàng)式的值.上述方法稱為秦九韶算法.直到今天,這種算法仍是多項(xiàng)式求值比較先進(jìn)的算法.(3)計(jì)算機(jī)的一個(gè)很重要的特點(diǎn)就是運(yùn)算速度快,但即便如此,算法好壞的一個(gè)重要標(biāo)志仍然是運(yùn)算的次數(shù).如果一個(gè)算法從理論上需要超出計(jì)算機(jī)允許范圍內(nèi)的運(yùn)算次數(shù),那么這樣的算法就只能是一個(gè)理論的算法.例3 已知一個(gè)5次多項(xiàng)式為f(x)=5x+2x+3.5x-2.6x+1.7x-0.8,用秦九韶算法求這個(gè)多項(xiàng)式當(dāng)x=5時(shí)的值.解:根據(jù)秦九韶算法,把多項(xiàng)式改寫成如下形式: f(x)=((((5x+2)x+3.5)x-2.6)x+1.7)x-0.8,按照從內(nèi)到外的順序,依次計(jì)算一次多項(xiàng)式當(dāng)x=5時(shí)的值: v0=5; v1=5×5+2=27;v2=27×5+3.5=138.5;v3=138.5×5-2.6=689.9;v4=689.9×5+1.7=3 451.2;v5=3 415.2×5-0.8=17 255.2;所以,當(dāng)x=5時(shí),多項(xiàng)式的值等于17 255.2.算法分析:觀察上述秦九韶算法中的n個(gè)一次式,可見vk的計(jì)算要用到vk-1的值,若令v0=an,我們可以得到下面的公式:
32?v0?an, ?v?vx?a(k?1,2,?,n).k?1n?k?k這是一個(gè)在秦九韶算法中反復(fù)執(zhí)行的步驟,因此可用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn).算法步驟如下:
第一步,輸入多項(xiàng)式次數(shù)n、最高次的系數(shù)an和x的值.第二步,將v的值初始化為an,將i的值初始化為n-1.第三步,輸入i次項(xiàng)的系數(shù)ai.第四步,v=vx+ai,i=i-1.第五步,判斷i是否大于或等于0.若是,則返回第三步;
否則,輸出多項(xiàng)式的值v.程序框圖如右圖: 程序:
INPUT “n=”;n INPUT “an=”;a INPUT “x=”;x v=a i=n-1 WHILE i>=0 PRINT “i=”;i INPUT “ai=”;a v=v*x+a i=i-1 WEND PRINT v END
(四)隨堂練習(xí)P45 練習(xí)1、2
(五)歸納總結(jié)
(1)用輾轉(zhuǎn)相除法求最大公約數(shù).(2)用更相減損術(shù)求最大公約數(shù).(3).秦九韶算法的方法和步驟.以及計(jì)算機(jī)程序框圖.(六)作業(yè)布置
1、P48習(xí)題1.3 A組1、2
2、完成課后鞏固作業(yè)
(八)五、教學(xué)反思:
_________________________________________________________ ___________________________________________________________________________________________________________________________________________________________________________
_________________________________________________________
1.3 算法案例 第2課時(shí) 進(jìn)位制
一、教學(xué)目標(biāo):
根據(jù)課標(biāo)要求:掌握不同進(jìn)制之間的相互轉(zhuǎn)化,會(huì)用程序描述不同進(jìn)制之間的轉(zhuǎn)化,體會(huì)數(shù)學(xué)的轉(zhuǎn)化思想,制定以下三維目標(biāo):
1、知識(shí)與技能
學(xué)生理解各種進(jìn)位制與十進(jìn)制之間轉(zhuǎn)換的規(guī)律,會(huì)利用十進(jìn)制與各種進(jìn)制之間的聯(lián)系進(jìn)行各種進(jìn)位制之間的轉(zhuǎn)換。
2、過程與方法
學(xué)生經(jīng)歷得出各種進(jìn)位制與十進(jìn)制之間轉(zhuǎn)換的規(guī)律的過程,進(jìn)一步掌握進(jìn)位制之間轉(zhuǎn)換的方法。
3、情感、態(tài)度與價(jià)值觀
學(xué)生通過合作完成任務(wù)后,領(lǐng)悟十進(jìn)制,二進(jìn)制的特點(diǎn),了解計(jì)算機(jī)的電路與二進(jìn)制的聯(lián)系,進(jìn)一步認(rèn)識(shí)到計(jì)算機(jī)與數(shù)學(xué)的聯(lián)系,培養(yǎng)他們的合作精神和嚴(yán)謹(jǐn)?shù)膽B(tài)度。
二、教學(xué)重點(diǎn)、難點(diǎn)
重點(diǎn):各進(jìn)位制之間的轉(zhuǎn)換。
解決策略:讓學(xué)生弄懂各進(jìn)位制的特點(diǎn)和聯(lián)系,再搭配習(xí)題講解。難點(diǎn):“除k取余法”的理解。
解決策略:先給出具體的例子講解,再延伸到一般的情況。
三、學(xué)法與教學(xué)用具
1、學(xué)法:講授法、歸納法、討論法。
2、教學(xué)用具:多媒體,投影儀
四、教學(xué)過程
(一)引入課題
在日常生活中,我們最熟悉、最常用的是十進(jìn)制,據(jù)說這與古人曾以手指計(jì)數(shù)有關(guān),愛好天文學(xué)的古人也曾經(jīng)采用七進(jìn)制、十二進(jìn)制、六十進(jìn)制,至今我們?nèi)匀皇褂靡恢芷咛?、?/p>
年十二個(gè)月、一小時(shí)六十分的歷法.今天我們來學(xué)習(xí)一下進(jìn)位制.(二)研探新知
進(jìn)位制是人們?yōu)榱擞?jì)數(shù)和運(yùn)算方便而約定的計(jì)數(shù)系統(tǒng),約定滿二進(jìn)一,就是二進(jìn)制;滿十進(jìn)一,就是十進(jìn)制;滿十二進(jìn)一,就是十二進(jìn)制;滿六十進(jìn)一,就是六十進(jìn)制等等.也就是說:“滿幾進(jìn)一”就是幾進(jìn)制,幾進(jìn)制的基數(shù)(都是大于1的整數(shù))就是幾.在日常生活中,我們最熟悉、最常用的是十進(jìn)制,據(jù)說這與古人曾以手指計(jì)數(shù)有關(guān),愛好天文學(xué)的古人也曾經(jīng)采用七進(jìn)制、十二進(jìn)制、六十進(jìn)制,至今我們?nèi)匀皇褂靡恢芷咛?、一年十二個(gè)月、一小時(shí)六十分的歷法.十進(jìn)制使用0 ~9十個(gè)數(shù)字.計(jì)數(shù)時(shí),幾個(gè)數(shù)字排成一行,從右起,第一位是個(gè)位,個(gè)位上的數(shù)字是幾,就表示幾個(gè)一;第二位是十位,十位上的數(shù)字是幾,就表示幾個(gè)十;接著依次是百位、千位、萬位??
例如:十進(jìn)制數(shù)3 721中的3表示3個(gè)千,7表示7個(gè)百,2表示2個(gè)十,1表示1個(gè)一.于是,我們得到下面的式子: 3 721=3×10+7×10+2×10+1×10.與十進(jìn)制類似,其他的進(jìn)位制也可以按照位置原則計(jì)數(shù).由于每一種進(jìn)位制的基數(shù)不同,所用的數(shù)字個(gè)數(shù)也不同.如二進(jìn)制用0和1兩個(gè)數(shù)字,七進(jìn)制用0~6七個(gè)數(shù)字.一般地,若k是一個(gè)大于1的整數(shù),那么以k為基數(shù)的k進(jìn)制數(shù)可以表示為一串?dāng)?shù)字連寫在一起的形式 anan-1?a1a0(k)(0<an<k,0≤an-1,?,a1,a0<k).其他進(jìn)位制的數(shù)也可以表示成不同位上數(shù)字與基數(shù)的冪的乘積之和的形式,如 110 011(2)=1×2+1×2+0×2+0×2+1×2+1×2,7 342(8)=7×8+3×8+4×8+2×8.非十進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)比較簡單,只要計(jì)算下面的式子值即可: anan-1?a1a0(k)=an×k+an-1×k+?+a1×k+a0.第一步:從左到右依次取出k進(jìn)制數(shù)anan-1?a1a0(k)各位上的數(shù)字,乘以相應(yīng)的k的冪,k的冪從n開始取值,每次遞減1,遞減到0,即an×k,an-1×k,?,a1×k,a0×k; 第二步:把所得到的乘積加起來,所得的結(jié)果就是相應(yīng)的十進(jìn)制數(shù).關(guān)于進(jìn)位制的轉(zhuǎn)換,教科書上以十進(jìn)制和二進(jìn)制之間的轉(zhuǎn)換為例講解,并推廣到十進(jìn)制和
n
n-
10nn-1321
0
543210321
0
其他進(jìn)制之間的轉(zhuǎn)換.這樣做的原因是,計(jì)算機(jī)是以二進(jìn)制的形式進(jìn)行存儲(chǔ)和計(jì)算數(shù)據(jù)的,而一般我們傳輸給計(jì)算機(jī)的數(shù)據(jù)是十進(jìn)制數(shù)據(jù),因此計(jì)算機(jī)必須先將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),再處理,顯然運(yùn)算后首次得到的結(jié)果為二進(jìn)制數(shù),同時(shí)計(jì)算機(jī)又把運(yùn)算結(jié)果由二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)輸出.1°十進(jìn)制數(shù)轉(zhuǎn)換成非十進(jìn)制數(shù)
把十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),教科書上提供了“除2取余法”,我們可以類比得到十進(jìn)制數(shù)轉(zhuǎn)換成k進(jìn)制數(shù)的算法“除k取余法”.2°非十進(jìn)制之間的轉(zhuǎn)換
一個(gè)自然的想法是利用十進(jìn)制作為橋梁.教科書上提供了一個(gè)二進(jìn)制數(shù)據(jù)與16進(jìn)制數(shù)據(jù)之間的互化的方法,也就是先由二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),再由十進(jìn)制數(shù)轉(zhuǎn)化成為16進(jìn)制數(shù).(三)范例分析
例1 把二進(jìn)制數(shù)110 011(2)化為十進(jìn)制數(shù).解:110 011(2)=1×2+1×2+0×2+0×2+1×2+1×2=1×32+1×16+1×2+1=51.點(diǎn)評(píng):先把二進(jìn)制數(shù)寫成不同位上數(shù)字與2的冪的乘積之和的形式,再按照十進(jìn)制的運(yùn)算規(guī)則計(jì)算出結(jié)果.例2設(shè)計(jì)一個(gè)算法,把k進(jìn)制數(shù)a(共有n位)化為十進(jìn)制數(shù)b.算法分析:從例1的計(jì)算過程可以看出,計(jì)算k進(jìn)制數(shù)a的右數(shù)第i位數(shù)字ai與k的乘積ai·k,再將其累加,這是一個(gè)重復(fù)操作的步驟.所以,可以用循環(huán)結(jié)構(gòu)來構(gòu)造算法.算法步驟如下: 第一步,輸入a,k和n的值.第二步,將b的值初始化為0,i的值初始化為1.第三步,b=b+ai·k,i=i+1.第四步,判斷i>n是否成立.若是,則執(zhí)行第五步;否則,返回第三步.第五步,輸出b的值.程序框圖如右圖:
i-1i-1
i-154
0
程序:
INPUT “a,k,n=”;a,k,n b=0 i=1 t=a MOD 10 DO b=b+t*k^(i-1)a=a10 t=a MOD 10 i=i+1 LOOP UNTIL i>n PRINT b END 例3 把89化為二進(jìn)制數(shù).解:根據(jù)二進(jìn)制數(shù)“滿二進(jìn)一”的原則,可以用2連續(xù)去除89或所得商,然后取余數(shù).具體計(jì)算方法如下:
因?yàn)?9=2×44+1,44=2×22+0,22=2×11+0,11=2×5+1,5=2×2+1,2=2×1+0,1=2×0+1,所以
89=2×(2×(2×(2×(2×2+1)+1)+0)+0)+1 =2×(2×(2×(2×(2+1)+1)+0)+0)+1 =?=1×2+0×2+1×2+1×2+0×2+0×2+1×2 =1 011 001(2).這種算法叫做除2取余法,還可以用右邊的除法算式表示:
把上式中各步所得的余數(shù)從下到上排列,得到89=1 011 001(2).上述方法也可以推廣為把十進(jìn)制數(shù)化為k進(jìn)制數(shù)的算法,稱為除k取余法.6543
02
例4 設(shè)計(jì)一個(gè)程序,實(shí)現(xiàn)“除k取余法”.算法分析:從例2的計(jì)算過程可以看出如下的規(guī)律:
若十制數(shù)a除以k所得商是q0,余數(shù)是r0,即a=k·q0+r0,則r0是a的k進(jìn)制數(shù)的右數(shù)第1位數(shù).若q0除以k所得的商是q1,余數(shù)是r1,即q0=k·q1+r1,則r1是a的k進(jìn)制數(shù)的左數(shù)第2位數(shù).??
若qn-1除以k所得的商是0,余數(shù)是rn,即qn-1=rn,則rn是a的k進(jìn)制數(shù)的左數(shù)第1位數(shù).這樣,我們可以得到算法步驟如下:
第一步,給定十進(jìn)制正整數(shù)a和轉(zhuǎn)化后的數(shù)的基數(shù)k.第二步,求出a除以k所得的商q,余數(shù)r.第三步,把得到的余數(shù)依次從右到左排列.第四步,若q≠0,則a=q,返回第二步;否則,輸出全部余數(shù)r排列得到的k進(jìn)制數(shù).程序框圖如右圖: 程序:
INPUT “a,k=”;a,k b=0 i=0 DO q=ak r=a MOD k b=b+r*10^i i=i+1 a=q LOOP UNTIL q=0 PRINT b END
(四)隨堂練習(xí)
1、將十進(jìn)制數(shù)34轉(zhuǎn)化為二進(jìn)制數(shù). 解:
即34(10)=100 010(2)
2、把1 234(5)分別轉(zhuǎn)化為十進(jìn)制數(shù)和八進(jìn)制數(shù). 解:1 234(5)=1×5+2×5+3×5+4=194. 則1 234(5)=302(8)
所以,1 234(5)=194=302(8)
點(diǎn)評(píng):本題主要考查進(jìn)位制以及不同進(jìn)位制數(shù)的互化.五進(jìn)制數(shù)直接利用公式就可以轉(zhuǎn)化為十進(jìn)制數(shù);五進(jìn)制數(shù)和八進(jìn)制數(shù)之間需要借助于十進(jìn)制數(shù)來轉(zhuǎn)化.
32(五)歸納總結(jié)
(1)理解算法與進(jìn)位制的關(guān)系.(2)熟練掌握各種進(jìn)位制之間轉(zhuǎn)化.(六)作業(yè)布置
1、習(xí)題1.3A組3、4.2、完成課后鞏固作業(yè)
(九)五、教學(xué)反思:
_________________________________________________________ ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________
第四篇:算法總結(jié)
算法分析與設(shè)計(jì)總結(jié)報(bào)告
71110415 錢玉明
在計(jì)算機(jī)軟件專業(yè)中,算法分析與設(shè)計(jì)是一門非常重要的課程,很多人為它如癡如醉。很多問題的解決,程序的編寫都要依賴它,在軟件還是面向過程的階段,就有程序=算法+數(shù)據(jù)結(jié)構(gòu)這個(gè)公式。算法的學(xué)習(xí)對(duì)于培養(yǎng)一個(gè)人的邏輯思維能力是有極大幫助的,它可以培養(yǎng)我們養(yǎng)成思考分析問題,解決問題的能力。作為IT行業(yè)學(xué)生,學(xué)習(xí)算法無疑會(huì)增強(qiáng)自己的競爭力,修煉自己的“內(nèi)功”。
下面我將談?wù)勎覍?duì)這門課程的心得與體會(huì)。
一、數(shù)學(xué)是算法的基礎(chǔ)
經(jīng)過這門課的學(xué)習(xí),我深刻的領(lǐng)悟到數(shù)學(xué)是一切算法分析與設(shè)計(jì)的基礎(chǔ)。這門課的很多時(shí)間多花在了數(shù)學(xué)公式定理的引入和證明上。雖然很枯燥,但是有必不可少。我們可以清晰的看到好多算法思路是從這些公式定理中得出來的,尤其是算法性能的分析更是與數(shù)學(xué)息息相關(guān)。其中有幾個(gè)定理令我印象深刻。
①主定理
本門課中它主要應(yīng)用在分治法性能分析上。例如:T(n)=a*T(n/b)+f(n),它可以看作一個(gè)大問題分解為a個(gè)子問題,其中子問題的規(guī)模為b。而f(n)可看作這些子問題的組合時(shí)的消耗。這些可以利用主定理的相關(guān)結(jié)論進(jìn)行分析處理。當(dāng)f(n)量級(jí)高于nlogba時(shí),我們可以設(shè)法降低子問題組合時(shí)的消耗來提高性能。反之我們可以降低nlogba的消耗,即可以擴(kuò)大問題的規(guī)?;蛘邷p小子問題的個(gè)數(shù)。因此主定理可以幫助我們清晰的分析出算法的性能以及如何進(jìn)行有效的改進(jìn)。
②隨機(jī)算法中的許多定理的運(yùn)用
在這門課中,我學(xué)到了以前從未遇見過的隨機(jī)算法,它給予我很大的啟示。隨機(jī)算法不隨機(jī),它可通過多次的嘗試來降低它的錯(cuò)誤率以至于可以忽略不計(jì)。這些都不是空穴來風(fēng),它是建立在嚴(yán)格的定理的證明上。如素?cái)?shù)判定定理是個(gè)很明顯的例子。它運(yùn)用了包括費(fèi)馬小定理在內(nèi)的各種定理。將這些定理進(jìn)行有效的組合利用,才得出行之有效的素?cái)?shù)判定的定理。尤其是對(duì)尋找證據(jù)數(shù)算法的改進(jìn)的依據(jù),也是建立在3個(gè)定理上。還有檢查字符串是否匹配也是運(yùn)用了許多定理:指紋的運(yùn)用,理論出錯(cuò)率的計(jì)算,算法性能的評(píng)價(jià)也都是建立在數(shù)學(xué)定理的運(yùn)用上。
這些算法都給予了我很大啟發(fā),要想學(xué)好算法,學(xué)好數(shù)學(xué)是必不可少的。沒有深厚的數(shù)學(xué)功力作為地基,即使再漂亮的算法框架,代碼實(shí)現(xiàn)也只能是根底淺的墻上蘆葦。
二、算法的核心是思想
我們學(xué)習(xí)這門課不是僅僅掌握那幾個(gè)經(jīng)典算法例子,更重要的是為了學(xué)習(xí)蘊(yùn)含在其中的思想方法。為什么呢?舉個(gè)例子。有同學(xué)曾問我這樣一個(gè)問題:1000只瓶子裝滿水,但有一瓶有毒,且毒發(fā)期為1個(gè)星期?,F(xiàn)在用10只老鼠在一個(gè)星期內(nèi)判斷那只瓶子有毒,每只老鼠可以喝多個(gè)瓶子的水,每個(gè)瓶子可以只喝一點(diǎn)。問如何解決?其實(shí)一開始我也一頭霧水,但是他提醒我跟計(jì)算機(jī)領(lǐng)域相關(guān),我就立馬有了思路,運(yùn)用二進(jìn)制。因?yàn)橛?jì)算機(jī)的最基本思想就是二進(jìn)制。所以說,我們不僅要學(xué)習(xí)算法,更得學(xué)習(xí)思想方法。
①算法最基本的設(shè)計(jì)方法包括分治法,動(dòng)態(tài)規(guī)劃法,貪心法,周游法,回溯法,分支定界法。我們可利用分治法做快速排序,降低找n個(gè)元素中最大元和最小元的量級(jí),降低n位二進(jìn)制x和y相乘的量級(jí),做Strassen矩陣乘法等等。它的思想就是規(guī)模很大的問題分解為規(guī)模較小的獨(dú)立的子問題,關(guān)鍵是子問題要與原問題同類,可以采取平衡法來提高性能。
動(dòng)態(tài)規(guī)劃法是把大問題分解為子問題,但是子問題是重復(fù)的,后面的問題可以利用前面解決過的問題的結(jié)果。如構(gòu)造最優(yōu)二叉查找樹,解決矩陣連乘時(shí)最小計(jì)算次數(shù)問題,尋找最長公共子序列等等。
貪心法就是局部最優(yōu)法,先使局部最優(yōu),再依次構(gòu)造出更大的局部直至整體。如Kruscal最小生成樹算法,求哈夫曼編碼問題。
周游法就是簡單理解就是采取一定的策略遍歷圖中所有的點(diǎn),典型的應(yīng)用就是圖中的深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)。
回溯法就是就是在滿足一定的條件后就往前走,當(dāng)走到某步時(shí),發(fā)現(xiàn)不滿足條件就退回一步重新選擇新的路線。典型的應(yīng)用就是8皇后問題,平面點(diǎn)集的凸包問題和0-1背包問題。
分支定界法:它是解決整數(shù)規(guī)劃問題一種最常用的方法。典型應(yīng)用就是解決整數(shù)規(guī)劃問題。
②評(píng)價(jià)算法性能的方法如平攤分析中的聚集法,會(huì)計(jì)法和勢能法。聚集法就是把指令分為幾類,計(jì)算每一類的消耗,再全部疊加起來。會(huì)計(jì)法就是計(jì)算某個(gè)指令時(shí)提前將另一個(gè)指令的消耗也算進(jìn)去,以后計(jì)算另一個(gè)指令時(shí)就不必再算了。勢能法計(jì)算每一步的勢的變化以及執(zhí)行這步指令的消耗,再將每一步消耗全部累計(jì)。
這幾種方法都是平攤分析法,平攤分析的實(shí)質(zhì)就是總體考慮指令的消耗時(shí)間,盡管某些指令的消耗時(shí)間很大也可以忽略不計(jì)。上述三種方法難易程度差不多,每種方法都有屬于它的難點(diǎn)。如聚集法中如何將指令有效分類,會(huì)計(jì)法中用什么指令提前計(jì)算什么指令的消耗,勢能法中如何選取勢能。因此掌握這些方法原理還不夠,還要學(xué)會(huì)去應(yīng)用,在具體的問題中去判斷分析。
三、算法與應(yīng)用緊密相關(guān)
我認(rèn)為學(xué)習(xí)算法不能局限于書本上的理論運(yùn)算,局限于如何提高性能以降低復(fù)雜度,我們要將它與實(shí)際生活聯(lián)系起來。其實(shí)算法問題的產(chǎn)生就來自于生活,設(shè)計(jì)出高效的算法就是為了更好的應(yīng)用。如尋找最長公共子序列算法可以應(yīng)用在生物信息學(xué)中通過檢測相似DNA片段的相似成分來檢測生物特性的相似性,也可以用來判斷兩個(gè)字符串的相近性,這可應(yīng)用在數(shù)據(jù)挖掘中??焖俑盗⑷~變換(FFT)可應(yīng)用在計(jì)算多項(xiàng)式相乘上來降低復(fù)雜度,脫線min算法就是利用了Union-Find這種結(jié)構(gòu)。還有圖中相關(guān)算法,它對(duì)于解決網(wǎng)絡(luò)流量分配問題起了很大的幫助,等等。
這些應(yīng)用給了我很大的啟發(fā):因?yàn)閱渭冎v一個(gè)Union-Find算法,即使了解了它的實(shí)現(xiàn)原理,遇到具體的實(shí)際問題也不知去如何應(yīng)用。這就要求我們要將自己學(xué)到的算法要和實(shí)際問題結(jié)合起來,不能停留在思想方法階段,要學(xué)以致用,做到具體問題具體分析。
四、對(duì)計(jì)算模型和NP問題的理解
由于對(duì)這部分內(nèi)容不是很理解,所以就粗淺的談一下我的看法。
首先談到計(jì)算模型,就不得不提到圖靈計(jì)算,他將基本的計(jì)算抽象化,造出一個(gè)圖靈機(jī),得出了計(jì)算的本質(zhì)。并提出圖靈機(jī)可以計(jì)算的問題都是可以計(jì)算的,否則就是不可計(jì)算的。由此引申出一個(gè)著名論題:任何合理的計(jì)算模型都是相互等價(jià)的。它說明了可計(jì)算性本身不依賴于任何具體的模型而客觀存在。
NP問題比較復(fù)雜,我認(rèn)為它是制約算法發(fā)展的瓶頸,但這也是算法分析的魅力所在。NP問題一般可分為3類,NP-C問題,NP-hard問題以及頑型問題。NP-C它有個(gè)特殊的性質(zhì),如果存在一個(gè)NP-C問題找到一個(gè)多項(xiàng)式時(shí)間的解法,則所有的NP-C問題都能找到多項(xiàng)式時(shí)間解法。如哈密頓回路問題。NP-hard主要是解決最優(yōu)化問題。它不一定是NP問題。這些問題在規(guī)模較小時(shí)可以找出精確解,但是規(guī)模大時(shí),就因時(shí)間太復(fù)雜而找不到最優(yōu)解。此時(shí)一般會(huì)采用近似算法的解法。頑型問題就是已經(jīng)證明不可能有多項(xiàng)式時(shí)間的算法,如漢諾塔問題。
最后談?wù)剬?duì)這門課程的建議
①對(duì)于這門算法課,我認(rèn)為應(yīng)該加強(qiáng)對(duì)算法思想方法的學(xué)習(xí)。所以我建議老師可不可以先拋出問題而不給出答案,講完一章,再發(fā)課件。讓我們先思考一會(huì)兒,或者給出個(gè)獎(jiǎng)勵(lì)機(jī)制,誰能解決這個(gè)問題,平時(shí)成績加分。這在一定程度上會(huì)將強(qiáng)我們思考分析問題的能力。因?yàn)槲腋杏X到,一個(gè)問題出來,未經(jīng)過思考就已經(jīng)知曉它的答案,就沒什么意思,得不到提高,而且也不能加深對(duì)問題的思考和理解。下次遇到類似的問題也就沒有什么印象。而且上課讓我們思考,點(diǎn)名回答問題可以一定程度上有效的防止不認(rèn)真聽課的現(xiàn)象。
②作業(yè)安排的不是很恰當(dāng)。本門課主要安排了三次作業(yè),個(gè)人感覺只有第一次作業(yè)比較有意思。后面兩次作業(yè)只是實(shí)現(xiàn)一下偽代碼,沒有太多的技術(shù)含量。而且對(duì)于培養(yǎng)我們的解決問題的能力也沒有太多的幫助,因?yàn)檫@間接成為了程序設(shè)計(jì)題,不是算法設(shè)計(jì)題。
③本門課的時(shí)間安排的不太恰當(dāng),因?yàn)楸緦W(xué)期的課程太多,壓力太大。沒有太多的時(shí)間去學(xué)習(xí)這門課程。因?yàn)槲蚁嘈糯蠹叶紝?duì)它感興趣,比較重視,想花功夫,但苦于沒時(shí)間。所以可不可以將課程提前一個(gè)學(xué)期,那時(shí)候離散數(shù)學(xué)也已經(jīng)學(xué)過,且課程的壓力也不是很大。錯(cuò)開時(shí)間的話,我覺得應(yīng)該能夠更好提高大家算法分析設(shè)計(jì)的能力。
第五篇:算法復(fù)習(xí)材料
1.假票統(tǒng)計(jì)
問題描述:
由于你們團(tuán)隊(duì)在國際大學(xué)生詩歌大賽上取得的巨大成就,你們學(xué)校決定為你們召開一次慶功雞尾酒會(huì),到來的人數(shù)大大超出了預(yù)期。然而慶功會(huì)的主管卻抱怨發(fā)現(xiàn)了有人使用假票,實(shí)際的門票是從1到N(N <= 10000),主管懷疑有人采用復(fù)印、打印等手段偽造了門票。他把所有收上來的門票拿給你,要求你編寫程序,統(tǒng)計(jì)所有門票中存在假票的門票數(shù)。輸入:
輸入文件中包含多組測試數(shù)據(jù),每組測試數(shù)據(jù)占兩行。第1行包括兩個(gè)整數(shù)N和M,分別表示門票的初始總張數(shù)和參加晚會(huì)的總?cè)藬?shù)(1 <= N <= 10000,1 <= M <= 20000)。第2行為M個(gè)整數(shù)Ti,表示收到的M張門票的號(hào)碼(1 <= Ti <= N)。輸入文件最后一行為0 0,表示輸入結(jié)束。輸出:
對(duì)每組輸入測試數(shù)據(jù),輸出一個(gè)整數(shù),占一行,表示收上來的門票中共有多少張票被偽造過。輸入樣例: 5 5 3 3 1 2 4 6 10 6 1 3 6 6 4 2 3 1 2 0 0 輸出樣例: 1 4
參考代碼:
//計(jì)算有幾個(gè)號(hào)碼被復(fù)制過 #include
2.看和說
問題描述:
看和說的順序定義如下:任何一個(gè)字符串都是以數(shù)字開頭,每個(gè)隨后的元素都是被前一個(gè)元素重新定義。例如,字符串“122344111”可以被描述為“1個(gè)1,兩個(gè)2,1個(gè)3,2個(gè)4和3個(gè)1”。因此,122344111以序列的形式表示出來就是1122132431。同理,101就表示1111111111。輸入:
輸入包括測試數(shù)據(jù)的組數(shù),然后依次為相應(yīng)的測試數(shù)據(jù),每個(gè)數(shù)據(jù)占一行,不會(huì)超過1000位。輸出: 對(duì)于每個(gè)測試數(shù)據(jù),輸出對(duì)應(yīng)的字符串。
輸入樣例: 3 122344111 1111111111 12345 輸出樣例: 1122132431 101 1112131415 參考代碼:
#include
num=1;
gets(s);
len=strlen(s);
for(i=0;i { if(s[i]!=s[i+1]) { printf(“%d%c”,num,s[i]); num=1; } else num++; } printf(“n”);} return 0;} 3.二進(jìn)制轉(zhuǎn)化為十六進(jìn)制 問題描述: 輸入一個(gè)2進(jìn)制的數(shù),要求輸出該2進(jìn)制數(shù)的16進(jìn)制表示。在16進(jìn)制的表示中,A-F表示10-15 輸入: 第1行是測試數(shù)據(jù)的組數(shù)n,后面跟著n行輸入。每組測試數(shù)據(jù)占1行,包括一個(gè)以0和1組成的字符串,字符串長度至少是1,至多是10000。輸出: n行,每行輸出對(duì)應(yīng)一個(gè)輸入。輸入樣例: 100000 111 輸出樣例: 7 參考代碼1: #include inti,n,dec,len; char bin[10001]; scanf(“%d”,&n); while(n--) { scanf(“%s”,bin); len=strlen(bin);//求二進(jìn)制數(shù)的長度 dec=4-len%4; if(len%4)//處理頭幾位,后移dec位,使得變成4的整數(shù)倍,前面補(bǔ)0 { for(i=len;i>=0;i--) bin[i+dec]=bin[i]; for(i=0;i bin[i]='0'; len+=dec; } for(i=0;i printf(“%X”,(bin[i+3]-'0')+(bin[i+2]-'0')*2+(bin[i+1]-'0')*4+(bin[i]-'0')*8); printf(“n”); } return 0;} //參考代碼2: #include int main(){ int i, j, t, tp, p;charstr[maxn], str_rev[maxn];char res[maxn/4], tmp[6], tmp_rev[6];while(scanf(“%d”, &t)!=EOF){ while(t--){ p = 0;scanf(“%s”, &str);intlen = strlen(str);for(i = lenii;strncpy(tmp, str_rev + i, k);for(j = kj-1] = tmp[j];sscanf(tmp_rev, “%d”, &tp);//printf(“k = %d tp = %d tmp = %s tmp_rev = %sn”, k, tp, tmp, tmp_rev);switch(tp){ case 0: res[p++] = '0';break;case 1: res[p++] = '1';break;case 10: res[p++] = '2';break;case 11: res[p++] = '3';break;case 100: res[p++] = '4';break;case 101: res[p++] = '5';break;case 110: res[p++] = '6';break;case 111: res[p++] = '7';break;case 1000: res[p++] = '8';break;case 1001: res[p++] = '9';break;case 1010: res[p++] = 'A';break;case 1011: res[p++] = 'B';break;case 1100: res[p++] = 'C';break;case 1101: res[p++] = 'D';break;case 1110: res[p++] = 'E';break;case 1111: res[p++] = 'F';break;default: break;} i += 4; } for(i = p-1;i >= 0;i--)printf(“%c”, res[i]);printf(“n”);} } return 0;}