Re: [請益] 沒有想像中簡單的小問題
※ 引述《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
03/16 17:01, 1F
推
03/26 05:44, , 2F
03/26 05:44, 2F
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章
7
18