Re: [請益] 沒有想像中簡單的小問題

看板Programming作者 (What?)時間16年前 (2009/03/11 13:28), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/34 (看更多)
※ 引述《tenfaces (我愛三筒小叮噹~~)》之銘言: : 這次某個公營考試的程式題目 : 列印出如下格式: : 3 : 345 : 34567 : 345 : 3 : 當初一看到題目 覺得很簡單啊 就跳下去寫了 後來發現~ : 唔 要左拼拼 右湊湊 才能搞定 挺多狀況的 : 上來討解答很白目 我是自己寫出來後 才想請問各位高手 : 有沒有比較直覺的想法還有解法 : 或是迴圈數更少的做作 看有些比較有經驗的版本的解答 應該可以加強下次寫此類題目的邏輯推演 : 小弟先將自己的版本放上來 謝謝各位分享 :) : //_____________程式開始 ________________ : #include<stdio.h> : void main(void) { : int i,j; : int step1=0; // 這二個步進值 分別控制 從三開始印到何時停止 : int step2=1; // : for (i=1;i<=5;i++) { // 外層迴圈跑五次 列印五行 : if(i<=3) { // 先寫上半段 到 34567 這個部份 : for(j=1;j<=5;j++) { // 此迴圈是控制 每一行的五個數字 : if(abs(j-3)<=step1) : printf("%d\t",j+i-1); : else printf("%s","\t"); : } : step1++; } : if(i>3) { // 再寫下半段 : for(j=1;j<=5;j++) { : if(abs(j-3)<=step2) : printf("%d\t",j-i+5); : else printf("%s","\t"); : } : step2--; } : printf("\n"); : } } : // 程式結束 ___________________________________ 下面是我的版本 有錯請指正^^ #include <stdio.h> typedef unsigned int uint; /* the start value of each row */ const uint START_VAL = 3; /* * the width of the diamond * must be odd number */ const uint WIDTH = 5; void print_row(uint indent, uint width) { uint val = START_VAL; while (indent--) putchar(' '); while (width--) printf("%d", val++); } void create_internal_diamond(const uint indent, const uint width) { print_row(indent, width); if (indent) { putchar('\n'); create_internal_diamond(indent-1, width+2); putchar('\n'); print_row(indent, width); } } void create_diamond(const uint width) { if (width) create_internal_diamond(width>>1, 1); } int main(int argc, char* argv[]) { create_diamond(WIDTH); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.108

03/16 17:01, , 1F
你的想法跟我一模一樣 連命名都很像..gj
03/16 17:01, 1F

03/26 05:44, , 2F
GJ
03/26 05:44, 2F
文章代碼(AID): #19jqlqRq (Programming)
討論串 (同標題文章)
文章代碼(AID): #19jqlqRq (Programming)