




已閱讀5頁,還剩114頁未讀, 繼續(xù)免費閱讀
2011年計算機二級C語言編寫程序題及答案解析精選.pdf.pdf 免費下載
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
2011年計算機二級 C 語言編寫程序題及答案解析精選 4 1 已知銀行整存整取存款不同期限的月息利率分別為 0 315 期限一年 0 330 期限二年 月息利率 0 345 期限三年 0 375 期限五年 0 420 期限八年 要求輸入存錢的本金和期限 求到期時能從銀行得到的利息與本金的合計 4 2 輸入年份 year 和月 month 求該月有多少天 判斷是否為閏年 可用如下 語言表 達式 year 4 0 if i j else if i j else if i n 1 2 min MIN i n j 1 else if i n 1 2 else min MIN i j a22 fun a11 min min n return fun a22 i min 1 j min 1 n 2 min 1 main int a11 1 i j n printf Enter n scanf d for i 1 i n i for j 1 j n j printf M fun a11 i j n printf n 4 24 分析 此題的關鍵還是要找到輸出數(shù)字 aij 和行列數(shù) i j 的關系 為此將圖形分 為四個區(qū)域如下圖 3 3 3 3 3 3 2 2 2 3 3 2 1 2 3 3 2 2 2 3 3 3 3 3 3 此圖 n 為5 在左上區(qū)域 即 i n 1 2 j n 1 2時 輸出數(shù)字為 n 1 2 i 1和 n 1 2 j 1中的 大者 記為 max n 1 2 i 1 n 1 2 j 1 在右上區(qū) 即 i n 1 2時 輸 出數(shù)字為 max n 1 2 i 1 j n 2 在左下區(qū) 即 i n 1 2 j n 1 2 j n 1 2時 輸出數(shù)字為 max i n 2 j n 2 參考答案 define max x y x y x y main int i j n printf nPlease Enter n scanf d n for i 1 i n i for j 1 j n j if i n 1 2 if j n 1 2 printf M max n 1 2 i 1 n 1 2 j 1 else printf M max n 1 2 i 1 j n 2 else if j n 1 2 printf M max i n 2 n 1 2 j 1 else printf M max i n 2 j n 2 printf n 4 25 分析 前面我們已經(jīng)見到過上下對稱的圖形 這是一個左右對稱的圖形 垂直中心 線上的數(shù)字恰好是行號 在每行位于圖形垂直中心線左方的數(shù)字是逐漸增加的 而右方是逐 漸減小的 j i 是分區(qū)的標志 左方輸出數(shù)字就是列數(shù) j 而右方的數(shù)字從 i 開始逐步減小 1 參考答案 main int i j for i 1 i 9 i for j 1 j 9 i j printf for j 1 j 1 j printf j printf n 4 26 分析 這類輸出字符的圖形和輸出數(shù)字的圖形考慮是近似的 因為字符的 ASCII 碼就是一個整數(shù) 在字符碼值的變化過程中 應該注意應該判斷碼值是否超出字符的范圍 進行必要的處理 為了保持程序的簡潔 本題沒有考慮這個問題 在下題里對這個問題進行 了處理 參考答案 main char c Z int i j n printf nPlease Enter n scanf d n for i 1 i n i for j 1 j n i 2 j if j n i 1 printf c c else printf printf c n c for i 1 i for j 1 j 2 n 1 i j if j i 1 printf c c else printf printf c n c 4 27 分析 此題與上題相近 區(qū)別在于輸出時字符的 ASCII 碼值的變化在圖形的中間一 行為最大 同時一行的兩個字符是相同的 程序考慮在輸入字符時設計了一個循環(huán) 保證輸 入的是英文字母 字符變化后進行了處理 程序中使用條件運算 在字符碼值增加的過程中 首先判斷是大寫還是小寫字符 然后判斷字符碼值是否超出英文字母 z 或 Z 如果超出則 重新賦為 a 或 A 在輸出圖象下半部分時 ASCII 碼值減少用同樣的思路進行判斷 在判 斷字符大小寫 條件語句的第一個判斷 時 用的是兩個不同的值 請讀者自行思考為什么 用同一個值是否可以 參考答案 main char c int i j n do printf nPlease Enter n char scanf d c n c while c Z c z for i 1 i n i for j 1 j n i 2 j if j n i 1 printf c c else printf printf c n c c c Z A c c z a c c 2 c c Z c A Z c c a z c for i 1 i for j 1 j 2 n 1 i j if j i 1 printf c c else printf printf c n c c c Z c A Z c c y x y main char c int i j n do printf nPlease Enter n char scanf d c n c while c Z c z for i 1 i n i for j 1 j n j if i n 1 2 if j n 1 2 printf c c max n 1 2 i 1 n 1 2 j 1 n 1 2 else printf c c max n 1 2 i 1 j n 2 n 1 2 else if j y x y main char c int i j n do printf nPlease Enter n char scanf d c n c while c Z c z for i 1 i n i for j 1 j n j if i n 1 2 if j n 1 2 printf c c max n 1 2 i 1 n 1 2 j 1 1 else printf c c max n 1 2 i 1 j n 2 1 else if j n 1 2 printf c c max i n 2 n 1 2 j 1 1 else printf c c max i n 2 j n 2 1 printf n 4 30 參考答案 include main int i j for i 1 i 10 i printf M i printf n n for i 1 i 10 i for j 1 j 10 j if j printf n 4 31 參考答案 include main int i j for i 1 i 10 i printf M i printf n n for i 1 i 10 i for j 1 j 10 j if jb c b a c c a b flag 1 while flag s a b c 2 printf S f s sqrt s a s b s c 4 33 參考答案 include main int j long n 使用長整型變量 以免超出整數(shù)的表示范圍 printf Please input number scanf ld n for j 999 j 100 j 可能取值范圍在999到100之間 j 從大到小 if n j 0 若能夠整除 j 則 j 是約數(shù) 輸出結(jié)果 printf The max factor with 3 digits in ld is d n n j break 控制退出循環(huán) 4 34 參考答案 define E 0 000001 main float x y 1 s 0 printf Please enter x scanf f x while 1 y E s s 1 y y y x printf S f n s 4 35 參考答案 include main int class1 class2 class3 char ch class1 class2 class3 0 初始化分類計數(shù)器 do ch getch switch ch case 0 case 1 case 2 case 3 case 4 case 5 case 6 case 7 case 8 case 9 class1 break 對分類 計數(shù) case case case case case case class2 break 對分類 計數(shù) default class3 break 對分類 計數(shù) while ch 字符 在 C 程序中要使用轉(zhuǎn)義符 printf class1 d class2 d class3 d n class1 class2 class3 4 36 分析 程序的關鍵是怎樣判斷一個單詞 由單詞的定義已知它是用空格 制表符或 換行符分隔開的 兩個字符之間沒有空格 制表符或換行符 則認為是一個單詞中的兩個字 符 參考答案 define EOF 1 define YES 1 define NO 0 include main 對輸入的行 字符和單詞進行計數(shù)統(tǒng)計 int c nl nc nw inword inword NO inword NO 已處理的最后一個字符是空格 t 或 n inword YES 已處理的最后一個字符不是空格 t 或 n nl nc nw 0 行 字符 字計數(shù)器置0 while c getchar EOF nc 進行字符計數(shù) if c n nl 進行行計數(shù) if c t c n c inword NO 如果讀入的字符是空格 t 或 n 則置 inword 為 NO else 讀入的字符不是空格 t 或 n if inword NO 如果前一個字符是空格 t 或 n inword YES 則讀入的字符為一個單詞的第一個字符 nw 置 inword 為 YES 進行單詞計數(shù) printf Lines d nWords d nChars d n nl nw nc 輸出結(jié)果 4 37 參考答案 define E 0 000001 include math h main int i k 1 float x y t 1 s r 1 printf Please enter x scanf f x for s x y x i 2 fabs r E i t t i 1 y y x x k k 1 r k y t 2 i 1 s s r printf S f n s 4 38 參考答案 main int i float s 0 for i 1 i 100 i s s i for i 1 i 50 i s s i i for i 1 i 10 i s s 1 0 i printf Result f n s 4 39 參考答案 main int i float s 1 for i 1 i0 001 i s s 1 0 i i 1 printf Result f i d n s i 4 40 參考答案 include main float x eps s y 0 y0 t int n j printf Enter x eps scanf f f x eps n t j 1 s x do y0 y if n 2 0 y y s t else y y s t s x x 求 x 的乘方 t j 1 j 2 求 n j 2 n while fabs y0 y eps 控制誤差 printf sin f f n x sin x 輸出標準 sin x 的值 printf d sin f f n n x y 輸出計算的近似值 4 41 參考答案 main int i j num a 10 for i 0 i 0 a j num j a j 1 a j a j 1 num for i 0 i0 printf d n n n 10 4 43 參考答案 main int i n long s1 0 s2 0 printf Please enter N scanf d n if n 0 for i n i 2 n i s1 s1 i i n if i 0 while i 2 n s2 s2 i printf Result1 ld result2 ld n s1 s2 4 44 分析 據(jù)題意 階梯數(shù)滿足下面一組同余式 x 1 mod2 x 2 mod3 x 4 mod5 x 5 mod6 x 0 mod7 參考答案 include main int i 1 i 為所設的階梯數(shù) while i 2 1 i 3 2 i 5 4 i 6 5 i 7 0 i 滿足一組同余式的判別 printf Staris number d n i 4 45 參考答案 main int i n a for i 0 i if i 8 1 n i 8 if n 8 1 n n 8 if n 8 7 a n 8 if i 4 n i 17 if n 15 n n 17 if 2 a n printf result d n i break 4 46 分析 二分法的基本原理是 若函數(shù)有實根 則函數(shù)的曲線應當在根這一點上與 軸有一個交點 在根附近的左右區(qū)間內(nèi) 函數(shù)值的符號應當相反 利用這一原理 逐步縮小 區(qū)間的范圍 保持在區(qū)間的兩個端點處的函數(shù)值符號相反 就可以逐步逼近函數(shù)的根 參考答案 include stdio h include math h main float x0 x1 x2 fx0 fx1 fx2 do printf Enter x1 x2 scanf f f x1 x2 fx1 2 x1 x1 x1 4 x1 x1 3 x1 6 求出 x1點的函數(shù)值 fx1 fx2 2 x2 x2 x2 4 x2 x2 3 x2 6 求出 x2點的函數(shù)值 fx2 while fx1 fx2 0 保證在指定的范圍內(nèi)有根 即 fx 的符號相反 do x0 x1 x2 2 取 x1和 x2的中點 fx0 2 x0 x0 x0 4 x0 x0 3 x0 6 求出中點的函數(shù)值 fx0 if fx0 fx1 1e 5 判斷 x0點的函數(shù)與 x 軸的 距離 printf x 6 2f n x0 4 47 分析 做圓的內(nèi)接4邊形 從圓心和4邊形頂點連接形成4個三角形 可以求出每個 三角形的面積 r2 2 現(xiàn)在我們知道三角形的面積和兩個邊長 均為半徑 a r b r 可以 用公式 S s s a s b s c 求出第三邊 c 我們將內(nèi)接4邊形換為內(nèi)接8邊形 原來的三角 形被一分為二 故 c 2就是每個三角形的高 面積又是可以求出的 再將三角形一分為 二 當三角形的面積求出時 內(nèi)接多邊形的面積就可求出 參考答案 main int n 4 double r 10 s cr c p s r r 2 do cr n s p 16 r r r r 64 s s c 4 r r sqrt p 2 c sqrt c s c r 4 n 2 n while n s cr 1 0e 10 printf PAI lf n cr r r 4 48 分析 根據(jù)題意 總計將所有的魚進行了五次平均分配 每次分配時的策略是相同 的 即扔掉一條后剩下的魚正好分為五份 然后拿走自己的一份 余下其它四份 假定魚的 總數(shù)為 x 則 x 可以按照題目的要求進行五次分配 x 1后可被5整除 余下的魚為4 x 1 5 若 x 滿足上述要求 則 x 就是題目的解 參考答案 main int n i x flag 1 flag 控制標記 for n 6 flag n 采用試探的方法 令試探值 n 逐步加大 for x n i 1 flag i 5 i 判斷是否可按要 if x 1 5 0 x 4 x 1 5 求進行5次分配 else flag 0 若不能分配則置標記 flag 0退出分配過程 if flag break 若分配過程正常 找到結(jié)果 退出試探的過程 else flag 1 否則繼續(xù)試探下一個數(shù) printf Total number of fish catched d n n 輸出結(jié)果 4 49 分析 按照題目的要求造出一個前兩位數(shù)相同 后兩位數(shù)相同且相互間又不同的整 數(shù) 然后判斷該整數(shù)是否是另一個整數(shù)的平方 參考答案 include math h main int i j k c for i 1 i 9 i i 車號前二位的取值 for j 0 j 9 j j 車號后二位的取值 if i j 判斷兩位數(shù)字是否相異 k i 1000 i 100 j 10 j 計算出可能的整數(shù) for c 31 c cif c c k printf Lorry No is d n k 若是 打印結(jié)果 4 50 分析 用窮舉法解決此類問題 設任取紅球的個數(shù)為 i 白球的個數(shù)為 j 則取黑 球的個數(shù)為8 i j 據(jù)題意紅球和白球個數(shù)的取值范圍是0 3 在紅球和白球個數(shù)確定的條 件下 黑球的個數(shù)取值應為8 i j 6 參考答案 main int i j count 0 printf RED BALL WHITE BALL BLACK BALL n printf n for i 0 i 3 i 循環(huán)控制變量 i 控制任取紅球個數(shù)0 3 for j 0 j 3 j 循環(huán)控制變量 j 控制任取白球個數(shù)0 3 if 8 i j 6 printf d d d n count i j 8 i j 4 51 分析 此題采用窮舉法 參考答案 main int x y z j 0 for x 0 x 33 x for y 0 y 100 3 x 2 y z 100 x y if z 2 0 3 x 2 y z 2 100 printf l m s n j x y z 4 52 分析 此題采用窮舉法 參考答案 main int f1 f2 f5 count 0 for f5 0 f5 20 f5 for f2 0 f2 5 M 2 1 n count f5 f2 f1 4 53 分析 此題采用窮舉法 參考答案 main long int i j k count 0 for i 1 i i 200 i for j 1 j j 200 j for k 1 k k 200 k if i i j j k k printf nA 2 B 2 C 2 4ld 4ld 4ld i j k count printf ncount ld count 4 54 分析 此題采用窮舉法 可設整數(shù) N 的千 百 十 個位為 i j k m 其取值 均為0 9 則滿足關系式 i 103 j 102 10k m 9 m 103 k 102 10j i 的 i j k m 即構(gòu)成 N 參考答案 include main int i for i 1002 i 1111 i 窮舉四位數(shù)可能的值 if i 1000 i 10 100 i 100 10 i 1000 i 9 printf The number satisfied states condition is d n i 判斷反序數(shù)是否是原整數(shù)的9倍若是則輸出 4 55 分析 此題采用窮舉法 參考答案 main int i j n k a 16 0 for i 1 i0 將十進制數(shù)轉(zhuǎn)變?yōu)槎M制數(shù) a k n 2 n n 2 for j 0 jif a j a k j 1 break if j k printf d i for j 0 jprintf a j printf n 4 56 分析 類似的問題從計算機算法的角度來說是比較簡單的 可以采用最常見的窮舉 法解決 程序中采用循環(huán)窮舉每個字母所可能代表的數(shù)字 然后將字母代表的數(shù)字轉(zhuǎn)換為相 應的整數(shù) 代入算式后驗證算式是否成立即可解決問題 參考答案 include main int p e a r for p 1 p 9 p 從1到9窮舉字母 p 的全部可能取值 for e 0 e 9 e 從0到9窮舉字母 e 的全部可能取值 if p e for a 1 a 9 a 從0到9窮舉字母 a 的全部可能取值 if a p a e for r 0 r 9 r 從0到9窮舉字母 r if r p r e r a 四個字母互不相同 p 1000 e 100 a 10 r a 100 r 10 a p 100 e 10 a printf PEAR d d d d n p e a r printf ARA d d d n a r a printf n printf PEA d d d n p e a 4 57 參考答案 main int i n k a 3 b 3 for i 248 i0 n 7 a k n 7 for n i k 0 n 0 n 9 b k n 9 if k 3 for n 0 nif a n b k n 1 break if n k printf d n i 4 58 參考答案 main int i j k m error for i 6 i j j 是素數(shù) m i j for k 2 kif m k 0 break if k m m 也是素數(shù) 輸出結(jié)果 printf M M M n i j m error 0 break if error printf M error 4 59 分析 可采用窮舉法 依次取1000以內(nèi)的各數(shù) 設為 i 將 i 的各位數(shù)字分解后 據(jù)阿姆斯特朗數(shù)的性質(zhì)進行計算和判斷 參考答案 include main int i t k a 4 0 printf There are following Armstrong number smaller than 1000 n for i 2 i 10 t 截取整數(shù) i 的各位 從高位向低位 a t i k k 10 分別賦給 a 0 a 3 k 10 if a 0 a 0 a 0 a 1 a 1 a 1 a 2 a 2 a 2 a 3 a 3 a 3 i printf d i 判斷 i 是否為阿姆斯特朗數(shù) 若滿足條件 則輸出 4 60 參考答案 main int j k n m printf Please enter n scanf d n for j 2 j for k 2 kif j k 0 break j 能夠被小于它的一個數(shù)整除就不是素數(shù) if k j j 是素數(shù) m n j for k 2 kif m k 0 break if k m m 也是素數(shù) 輸出結(jié)果 printf M M M n n j m break 4 61 分析 按照親密數(shù)定義 要判斷數(shù) a 是否有親密數(shù) 只要計算出 a 的全部因子的累 加和為 b 再計算 b 的全部因子的累加和為 n 若 n 等于 a 則可判定 a 和 b 是親密數(shù) 計算 數(shù) a 的各因子的算法 用 a 依次對 i i 1 a 2 進行模運算 若模運算結(jié)果等于0 則 i 為 a 的一個因子 否則結(jié)束對 a 的因子的計算 參考答案 include include main int a i m n printf Friendly numbers pair samller than 3000 n for a 1 a 3000 a 窮舉3000以內(nèi)的全部整數(shù) for m 0 i 1 i a 2 i 計算數(shù) a 的各因子 各因子之和存于 m if a i m i 計算 m 的各因子 各因子之和存于 n for n 0 i 1 imagic printf Wrong too hight n else if guessprintf Wrong too low n printf Right n printf guess counter is d n counter 4 63 分析 直接計算階乘的結(jié)果顯然超出整型數(shù)的范圍 此題的關鍵是如何減少計算中 數(shù)的規(guī)模 注意在計算過程中出現(xiàn)0后 我們可以先行統(tǒng)計0的個數(shù) 然后將0從結(jié)果中移去 另外 結(jié)果僅保存?zhèn)€位數(shù)即可 其它位的數(shù)不會對0的個數(shù)產(chǎn)生影響 參考答案 main int i n 0 long s 1 for i 1 i 1000 i s s i while s 0 s s 10 n s s printf n d s d n n s 4 64 參考答案 main int i j b 3 2 int a 2 3 1 2 3 4 5 6 for i 0 i 1 i for j 0 j 2 j b j i a i j for i 0 i 2 i for j 0 j 1 j printf d b i j printf n 4 65 參考答案 main int i count 0 a 11 0 10 2 8 22 16 4 10 6 14 20 while 1 for i 1 i 10 i a i 1 a i 1 2 a i 2 a 10 a 10 2 a 0 for i 1 i 10 i if a i 2 1 a i for i 1 i 10 i if a i a i 1 break if i 10 break else a 0 0 count printf count d number d n count a 1 4 66 參考答案 main int i j s1 0 s2 1 a 5 5 for i 0 i 5 i for j 0 j 5 j printf d d i j scanf d a i j for i 0 i 5 i for j 0 j 5 j printf a i j printf n j 0 for i 0 ia j j j i printf SUN d nACCOM d na d d n s1 s2 j a j j 4 67 參考答案 include stdio h main int i n 0 a 4 0 printf Please enter a digit for i 0 i 4 a i getchar n i for i 0 i 48 a i 65 a i 97 a i 102 a i a i 87 else printf input Error for i 0 i0 將十進制數(shù)轉(zhuǎn)變?yōu)槎M制數(shù) a k n 2 n n 2 for i 0 i 16 i printf a i 4 69 參考答案 include main int i j m s k a 100 for i 1 i0 尋找 i 的因子 for j 1 jif m j 0 s s j m m j a k j if j m break if s 0 i s m a k m for j 0 jprintf M a j printf M n i 4 70 參考答案 main int i j k n m 1 r 1 a 2 100 0 printf Please enter n scanf d n for i 0 i printf a d i scanf d a 0 i while m n m 記錄已經(jīng)登記過的數(shù)的個數(shù) for i 0 i if a 1 i 0 已登記過的數(shù)空過 continue k i for j i jif a 1 j 0 a 0 j a 1 k r 記錄名次 r 為名次 m 登記過的數(shù)增1 for j 0 jif a 1 j 0 a 0 j a 0 k a 1 j a 1 k m break for i 0 iprintf a d d d n i a 0 i a 1 i 4 71 參考答案 include main int i j k 0 m 2 s r 0 a 500 printf M m for i 3 i 2000 i for j 2 j 1898 break if s 1898 r printf nresult d n r 4 72 分析 本問題的思路很多 我們介紹一種簡單快速的算法 首先求出三位數(shù)中不包含0且是某個整數(shù)平方的三位數(shù) 這樣的三位數(shù)是不多的 然后將滿 足條件的三位數(shù)進行組合 使得所選出的三個三位數(shù)的九個數(shù)字沒有重復 程序中可以將尋 找滿足條件三位數(shù)的過程和對該三位數(shù)進行數(shù)字分解的過程結(jié)合起來 參考答案 include main int a 20 num 20 3 b 10 a 存放滿足條件的三位數(shù) num 滿足條件的三位數(shù)分解后得到的數(shù)字 b 臨時工作 int i j k m n t flag printf The 3 squares with 3 different digits each are n for j 0 i 11 i 31 i 求出是平方數(shù)的三位數(shù) if i 0 若不是10的倍數(shù) 則分解三位數(shù) k i i 分解該三位數(shù)中的每一個數(shù)字 num j 1 0 k 100 百位 num j 1 1 k 10 十位 num j 1 2 k 個位 if num j 1 0 num j 1 1 num j 1 0 num j 1 2 num j 1 1 num j 1 2 若分解的三位數(shù)字均不相等 a j k j 計數(shù)器 統(tǒng)計已找到的滿足要求的三位數(shù) for i 1 i j 2 i 從滿足條件的三位數(shù)中選出三個進行組合 b 1 num i 0 取第 i 個數(shù)的三位數(shù)字 b 2 num i 1 b 3 num i 2 for t i 1 t j 1 t b 4 num t 0 取第 t 個數(shù)的三位數(shù)字 b 5 num t 1 b 6 num t 2 for flag 0 m 1 flag m 3 m flag 出現(xiàn)數(shù)字重復的標記 for n 4 flag n 6 n 判斷前兩個數(shù)的數(shù)字是否有重復 if b m b n flag 1 flag 1 數(shù)字有重復 if flag for k t 1 k j k b 7 num k 0 取第 k 個數(shù)的三位數(shù)字 b 8 num k 1 b 9 num k 2 判斷前兩個數(shù)的數(shù)字是否與第三個數(shù)的數(shù)字重復 for flag 0 m 1 flag m 6 m for n 7 flag n 9 n if b m b n flag 1 if flag 若均不重復則打印結(jié)果 printf d d d n a i a t a k 4 73 參考答案 main int i n k a 3 b 3 for i 248 i0 n 7 a k n 7 for n i k 0 n 0 n 9 b k n 9 if k 3 for n 0 nif a n b k n 1 break if n k printf d n i 4 74 參考答案 include int pos 101 div 101 main int m n i j printf Please input m n 0 100 scanf d d m n printf d d 0 m n for i 1 i 100 i pos m i m 10 div i m n m m n if m 0 for j 1 j i j printf d div j break if pos m 0 for j 1 ji m a t n b i j a k b z i else m b i n a t j b k a z t while m j n 1 m n 10 m m n if n k 1 k 1 break if n k 1 k n 19 n 1 1 if n k z n 1 1 break while j 38 printf d j 1 printf n 4 76 參考答案 include stdio h int a 20 b 20 main int t 0 m n k j z i 0 printf Input number 1 do a t getchar 0 while a t 38 printf Input number 2 do b i getchar 0 while b i 38 if t i m a t n b i j a k b z i else m b i n a t j b k a z t while m j n 1 m n 10 m m n if n k 1 k 1 break if n k 1 k n 19 n 1 1 if n k z n 1 1 break while j 38 printf d j 1 printf n 4 77 參考答案 include stdio h int a 20 b 20 c 40 main int t 0 m n k f e 0 j i 0 printf Input number 1 do a t getchar 0 while a t 38 printf Input number 2 do b i getchar 0 while b i 38 j c for m a t 1 m a 1 m e j c e for n b i 1 n b 1 n f j m n j f j f 10 while j c printf d j printf n 4 78 這是一個使用數(shù)組解決較復雜問題的典型題目 棋盤如左圖所示 圖中箭頭表示一個棋子從 1 1 點跳到 2 3 點 為了下面敘述的方便 將 I J 表示棋子起跳點的行 列號 X Y 表示落子點的行 列號 首先我們討論如何從起跳點坐標求出可能的落子點的坐標 從某點起跳 棋子最多可能有八個落子點 例如從 I 3 J 5點起跳 八個可能的落子點的 坐標是 4 5 5 4 5 2 4 1 2 1 1 2 1 4 2 5 將起落點的 行列坐標分開考慮 則由起點的行坐標分別與下列八個數(shù)相加 就可得到可能的八個落子點 的行坐標 1 2 2 1 1 2 2 1 將這八個數(shù)存入數(shù)組 b 即 b 1 2 2 1 1 2 2 1 落子點的行坐標 X 和起跳點行坐標有如下關系 X b k I 1 k 8 如果由上式計算得到的落子點 X 的坐標值小于0或大于8 則表示落在了棋盤之外 應予舍棄 同理得到起落點之間的列坐標關系數(shù)組是 d 2 1 1 2 2 1 1 2 我們再討論落子點的度數(shù)問題 對于棋盤中的某一點來說 周圍最多有8個方向的棋子在這 個點落子 把可能的落子數(shù)稱為度數(shù) 棋盤上各點的度數(shù)如下圖所示 根據(jù)題意 一個點只能落子一次 所以落過子的點的度數(shù)應記為0 可跳向度數(shù)為0點的度數(shù) 相應要減1 根據(jù)上述數(shù)組 從一個起跳點出發(fā) 可能求出數(shù)個可以落子點的坐標 跳棋時到底確定落在 這些點中的哪一個呢 我們確定一個原則是落在度數(shù)最少的點 如果可能落子點中有兩個點 的度數(shù)一樣且都為是度數(shù)最少時 取后求出的點為落子點 因此 如果改變數(shù)組 b d 中數(shù) 的存放順序 遇到兩個度數(shù)最少點的先后順序就要改變 整個跳棋路徑就可改變 2 3 4 4 4 4 3 2 3 4 6 6 6 6 4 3 4 6 8 8 8 8 6 4 4 6 8 8 8 8 6 4 4 6 8 8 8 8 6 4 4 6 8 8 8 8 6 4 3 4 6 6 6 6 4 3 2 3 4 4 4 4 3 2 在下面的程序中 將起落子行列關系的兩個一維數(shù)組合并為一個二維數(shù)組 為了提高程序的 可讀性 不使用下標為0的數(shù)組元素 參考程序 int base 9 3 0 0 0 從起跳點求落腳點的基礎系數(shù)數(shù)組 0 1 2 0 2 1 0 2 1 0 1 2 0 1 2 0 2 1 0 2 1 0 1 2 main int a 9 9 object 9 9 int i j k p x y m n cont int min rm1 rm2 rm0 1 for cont 1 cont 0 for i 0 i 8 i 保存?zhèn)€點度數(shù)的數(shù)組 清零 for j 0 j 8 j a i j 0 rm1 base 1 1 改變基礎數(shù)組元素排列順序 rm2 base 1 2 base 1 1 base rm0 1 base 1 2 base rm0 2 base rm0 1 rm1 base rm0 2 rm2 for i 1 i 8 i for j 1 j 8 j 計算各點度數(shù)存入數(shù)組 a for p 1 p 1 x 1 y 8 a x y printf d a i j 輸出度數(shù)表 printf n printf Please Input start position line colume n scanf d d i j 輸入起跳點坐標 for k 1 k 63 k 求棋盤上63個落步點 object i j k 跳步路徑存入數(shù)組 object min 10 for p 1 p 1 x 1 ya x y 判斷當前可能點度數(shù)是否最小 min a x y 保存可能最小度數(shù)點的度數(shù) m x 保存可能最小度數(shù)點的坐標 n y a i j 0 落過棋子的 i j 點度數(shù)為零 i m 已求出的最小度數(shù)點為下次搜尋的起跳點 j n object i j 64 for i 1 i 8 i 輸出跳步結(jié)果路徑 for j 1 j 8 j if j 8 printf object i j else printf object i j printf n if i 8 printf n 每行輸出8個數(shù)據(jù) rm0 8 放在基礎數(shù)組第一位的元素循環(huán)變化 rm0 基礎數(shù)組下一元素放在第一位 printf continue 1 or 0 scanf d cont 4 79 分析 采用試探法求解 如圖所示 用 I J 表示行 列坐標 開始棋盤為空 對于第1個皇后先占用第一行即 I 1 先試探它占用第一列 J 1位置 則它所 在的行 列和斜線方向都不可在放其它皇后了 用線將它們劃掉 第2個皇后不能放在 J 1 2的位置 試 J 3 第2個皇后占用 2 3 后 它的行列和斜線方向也不可再放其它皇后 第 3個皇后不能放在 J 1 2 3 4的位置 試 J 5 第4個皇后可以試位置 4 2 第5個皇后 試位置 5 4 第6個皇后已經(jīng)沒有可放的位置 棋盤上所有格子都已占滿 說明前面所放 位置不對 退回到前一個皇后5 釋放它原來占用的位置 5 4 改試空位置 5 8 然后再前進到第6 個皇后 此時仍無位置可放 退回到第5個皇后 它已沒有其它位置可選擇 進一步退回到 第4個皇后釋放位置 4 2 改試位置 4 7 再前進到第5個皇后進行試探 如此繼續(xù) 直到 所有8個皇后都選擇一個合適的位置 即可打印一個方案 然后從第8個皇后開始 改試其它空位置 若沒有可改選的空位置 則退回到第7個皇后改試 其它位置 若也沒有空位置可改 繼續(xù)退 直到有另外的空位置可選的皇后 將它原來占用 的位置釋放 改占其它新位置 然后前進到下一個皇后進行試探 直到所有8個皇后都找到 合適位置 又求出一個解 打印輸出新方案 按此方法可得到92個方案 參考答案 define NUM 8 int a NUM 1 main int number i k flag nonfinish 1 count 0 i 1 a 1 1 while nonfinish while nonfinish i1 a i NUM a i 1 else if i 1 a i NUM nonfinish 0 else a i else if a i NUM a i 1 else a i else if i NUM if a i 1 NUM a i 1 else a i a i 1 1 if nonfinish printf n count for k 1 k 0 x 2 x 4 x 0 xn printf d d d d n i j k l 比較分子的大小 else if m n printf d d d d n i j k l 輸出比較的結(jié)果 else printf d d d d n i j k l zxgb a b int a b long int c int d if a for for c a bc a b b 0b 0 用輾轉(zhuǎn)相除法求用輾轉(zhuǎn)相除法求 a a 和和 b b 的最大公約數(shù)的最大公約數(shù) d bd b b a bb a b a da d return int return int c a c a 返回最小公倍數(shù)返回最小公倍數(shù) 4 824 82 參考答案 參考答案 main main intint a 5 i t ka 5 i t k forfor i 100 i 100 i 1000i 10k 10 t t a t i k k 10 a t i k k 10 k 10k 10 if f a 0 f a 1 f a 2 i if f a 0 f a 1 f a 2 i printf dprintf d i i f m f m intint m m intint i 0 t 1i 0 t 1 while i m while i m t it i return t return t 4 834 83 分析 任取兩個平方三位數(shù) 分析 任取兩個平方三位數(shù) n n 和和 n1n1 將 將 n n 從高向低分解為從高向低分解為 a a b b c c 將 將 n1n1從高到從高到 低分解為低分解為 x x y y z z 判斷 判斷 axax byby czcz 是否均為完全平方數(shù) 是否均為完全平方數(shù) 參考答案 參考答案 main main voidvoid f f intint i t a 3 b 3 i t a 3 b 3 printf Theprintf The possiblepossible perfectperfect squaressquares combinationscombinations are n are n for i 11for i 11 i 31i 31 i i 窮舉平方三位數(shù)的取值范圍窮舉平方三位數(shù)的取值范圍 for t 11for t 11 t 31t 10k 10 s s s s n k k 10 n k k 10 k k 1010 4 844 84 參考答案 參考答案 main main intint i j l n m k a 20 20 i j l n m k a 20 20 printf Pleaseprintf Please enterenter n m n m scanf d d n m scanf d d n m for i 0for i 0 ifor j 0ifor j 0 j j printf a d d i j printf a d d i j scanf d a i j scanf d a i j for i 0for i 0 i i for j 0for j 0 jprintf m a i j jprintf m a i j printf n printf n for i 0for i 0 i i for j 0 k 0for j 0 k 0 jif a i j a i k jif a i j a i k k jk j 找出該行最大值找出該行最大值 for l 0for l 0 lif a l k lif a l k if l n if l n 沒有比沒有比 a i k a i k 小的數(shù) 循環(huán)變量
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 常州工程職業(yè)技術學院《高級阿拉伯語二》2023-2024學年第二學期期末試卷
- 新疆科技學院《外國史學名著選讀》2023-2024學年第二學期期末試卷
- 淮北理工學院《社會學原理類》2023-2024學年第二學期期末試卷
- 重慶智能工程職業(yè)學院《生物統(tǒng)計與應用》2023-2024學年第二學期期末試卷
- 赤峰學院《教育史專題研究》2023-2024學年第二學期期末試卷
- 梧州學院《現(xiàn)代舞創(chuàng)編》2023-2024學年第二學期期末試卷
- 東北林業(yè)大學《生物科學專業(yè)英語》2023-2024學年第二學期期末試卷
- 山西航空職業(yè)技術學院《攝影報道》2023-2024學年第二學期期末試卷
- 合肥共達職業(yè)技術學院《現(xiàn)代電子測量技術》2023-2024學年第二學期期末試卷
- 內(nèi)蒙古工業(yè)大學《概率論與數(shù)據(jù)統(tǒng)計》2023-2024學年第二學期期末試卷
- 中央空調(diào)操作規(guī)程詳細版
- 薄膜沉積速率與均勻性研究
- 影視鑒賞-第六章-影視藝術的鑒賞與評論
- 丘腦出血的護理查房
- DB21T 2700-2024 焊接絕熱氣瓶充裝站安全技術條件
- 檢測實驗室發(fā)展規(guī)劃方案
- 閑置廢舊物資管理與處置辦法培訓課件
- 建設工程質(zhì)量檢測方案-技術標部分
- 大學英語詞匯表(5500)個單詞
- 駕駛員疲勞駕駛監(jiān)測系統(tǒng)
- 裝飾公司項目融資計劃書
評論
0/150
提交評論