作者frank1983 (What?)
站内Programming
标题Re: [请益] 没有想像中简单的小问题
时间Wed Mar 11 13:28:19 2009
※ 引述《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
1F:推 Alexboo:你的想法跟我一模一样 连命名都很像..gj 218.32.188.246 03/16 17:01
2F:推 wupojung:GJ 211.74.191.193 03/26 05:44