返回首页

下午好,我想知道我怎么能打印一个正方形,其中数量增长的团结,作为以下(视平方线,在这种情况下,5号线):


00000

01110

01210

01110

00000


我怎样才能做到这一点的C / C

最好的问候。
安赫尔・曼努埃尔。

[注:我试图发现,谷歌,但我不能找到任何答案]

回答

评论会员:阿里Fakoor 时间:2012/02/06
这里是另一种解决方案,这一次非递归(即动态):
#include <stdio.h>



#define MAX (5-1)

int gSquare [MAX+1][MAX+1];

 

/* copy a source row to destination row */

void cpRow (int dstRow,int srcRow){

    for (int col=0; col<= MAX; col++)

        gSquare[dstRow][col]= gSquare[srcRow][col];

}

 



/* fill all the cells of a given row with zeros */

void ZerFil (int row){

    for (int col=0; col<= MAX; col++)

        gSquare[row][col]=0;

}

/* Print out a given row on screen */

void PrnRow (int row){

    for (int col=0;col<=MAX;col++)

        printf ("%d\t",gSquare [row][col]);

    printf ("\n");

}

 

/* Dynamically define each rows values based on previous rows */

void CalcRow (int row){

    if (2 * row > MAX+1) {/* we are on lower half */

        /* copy symmetrically   mirror flip */

        cpRow(row, MAX-row);

        return;

    }

 

    cpRow (row, row-1); /* Initiate me as previous row */

    /* increase required cells */

    for (int i=row; i<= MAX-row; i++) 

        gSquare[row][i]++;

}

 

int main() {

    /* Zero the initial row as zero for base of calculation */

    ZerFil(0);

    PrnRow (0);

 

    for (int row=1; row<=MAX;row++){

        CalcRow (row);

        PrnRow (row);

    }

    return 0;

}
评论会员:游客 时间:2012/02/06
|阿里Fakoor:这是可以做到递归如下:codeprelang="c++"spanclass="code-preprocessor"#include/spanspanclass="code-preprocessor"spanclass="code-keyword"</spanspanclass="code-leadattribute"stdio.h/spanspanclass="code-keyword">/span/spanspanclass="code-keyword"int/spanpadOffset(spanclass="code-keyword"int/spanrow,spanclass="code-keyword"int/spann){spanclass="code-keyword"int/spanoff1=row-n;spanclass="code-keyword"if/span(off1<spanclass="code-digit"0/span)off1=off1*(-spanclass="code-digit"1/span);spanclass="code-keyword"return/span(row<off1)?row:off1;}spanclass="code-keyword"int/spandiffCount(spanclass="code-keyword"int/spanrow,spanclass="code-keyword"int/spancol,spanclass="code-keyword"int/spann){spanclass="code-keyword"int/spanloc1=padOffset(row,n);spanclass="code-keyword"int/spanloc2=n-loc1;spanclass="code-keyword"int/spandif=(loc1==row)?1:-spanclass="code-digit"1/span;spanclass="code-comment"///spanspanclass="code-comment"determinesign/spanspanclass="code-keyword"if/span(dif<spanclass="code-digit"0/span){loc1++;loc2--;}spanclass="code-comment"///spanspanclass="code-comment"strechenhalfwaydown/spanspanclass="code-keyword"if/span(loc1>col||col>loc2)dif=0;spanclass="code-keyword"return/spandif;}spanclass="code-keyword"int/spangetCell(spanclass="code-keyword"int/spanrow,spanclass="code-keyword"int/spancol,spanclass="code-keyword"int/spann){spanclass="code-keyword"if/span(row<=spanclass="code-digit"0/span)spanclass="code-keyword"return/spanrow;spanclass="code-keyword"int/spaninc=diffCount(row,col,n);spanclass="code-keyword"return/spangetCell(row-spanclass="code-digit"1/span,col,n)+inc;}spanclass="code-keyword"int/spanmain(){spanclass="code-keyword"int/spann;printf(spanclass="code-string""/spanspanclass="code-string"Entern:"/span);scanf(spanclass="code-string""/spanspanclass="code-string"%d"/span,&n);n--;spanclass="code-comment"///spanspanclass="code-comment"indexingatzero!/spanspanclass="code-keyword"for/span(spanclass="code-keyword"int/spanrow=0;row<=n;row++){spanclass="code-keyword"for/span(spanclass="code-keyword"int/spancol=0;col<=n;col++)printf(spanclass="code-string""/spanspanclass="code-string"%d\t"/span,getCell(row,col,n));printf(spanclass="code-string""/spanspanclass="code-string"\n"/span);}spanclass="code-keyword"return/spanspanclass="code-digit"0/span;}/pre/code的:理查德MacCutchan:正如你可以看到你的照片上面,它只是一个计数的数量和每种类型的数字印刷的问题。工作逻辑,然后将它转换成代码
enhzflep:是不是每一个数字,使广场达到边缘,就必须采取的步骤的最低数量

你会不会要跟踪:
(一)有多远从左侧边缘
(二)如何远离右边缘
(三)从顶部边缘多远
(d)如何从底部边缘

仅仅印刷这曾是每个细胞,使广场的最小值......
评论会员:enhzflep 时间:2012/02/06
{体C3}