2017-12-15 13 views
-2

downvoteの前に、自分のコードを見てください。私はあなたがこれが数学のオタクにとって正当な質問であることを願っています。ピラミッドナンセンス:if条件文ではなく、代数的にi = 0をどのように除外できますか?

私はこの生産:

--------------------- 
*-------------------* 
**-----------------** 
***---------------*** 
****-------------**** 
*****-----------***** 
******---------****** 
*******-------******* 
********-----******** 
*********---********* 
**********-********** 
*********---********* 
********-----******** 
*******-------******* 
******---------****** 
*****-----------***** 
****-------------**** 
***---------------*** 
**-----------------** 
*-------------------* 

をしかし、私は最初の行に満足していませんでした。私はそれを除外したいので、for-loopの周りにif-conditionalラッパーを付けてi = 0を除外した新しいものを作った。誰かがよりクリーンなソリューションを知っているのだろうかと思っていました。 (FYI、これはテストの質問だった、と私の解決策は、非常にずさんだった。私は、このためのクリーナー方法(愚かなピラミッドプログラミング)を練習しています。

コード

コメント// I want to exclude i=0 by using algebra in the for loopを見てください。アイデアと誰?

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 

    /* Pyramid Size */ 
    int n = 10; 

    /* Take care of the top */ 
    for (int i=0;i<n;i++) { 
    for (int j=0;j<i;j++) 
     printf("*"); 
    if (i != 0) { // I want to exclude i=0 by using algebra in the for loop 
     for (int j=0;j<=n*2-i*2;j++) { 
     printf("-"); 
     } 
    } 
    for (int j=0;j<i;j++) 
     printf("*"); 
    printf("\n"); 
    } 

    /* Take care of the bottom */ 
    for (int i=n;i>0;i--) { 
    for (int j=0;j<i;j++) 
     printf("*"); 
    for (int j=0;j<=n*2-i*2;j++) { 
     printf("-"); 
    } 
    for (int j=0;j<i;j++) 
     printf("*"); 
    printf("\n"); 
    } 
} 
+0

「代数を使用する」とはどういう意味ですか? *条件* 'i!= 0'に代数はありませんか? –

+0

@Someprogrammerdude私はあなたが上記の式に 'j <= n * 2-i * 2'という意味を持つようにして、条件付きifを完全に取り除くことができます。言い換えれば、どのようにして 'i!= 0'を代数的に表現できますか? –

+1

https://codereview.stackexchange.com/a/149694をご覧ください。 –

答えて

2

からiを開始することができますループ内のjについては、によって、<=が返されます。

あなたの星が完全に満たされていない途中で、それらの間にまだギャップがあることにも注意してください。これは意図された動作ですか?

この「トリック」は最初から必要なのでしょうか?モダンアートの絵の底には空白がありません。このような「奇跡」のタイプは、オフ・バイ・ワン・エラーと呼ばれます。境界ケースについては、設計通りの動作をするかどうかを慎重に確認する必要があります。

+0

はい、ピラミッド間のスペースは、不均等な中間線を避けるための意図された動作です。ここでupvotesを愛するが、質問にdownvotes。そのような歓迎的な学習環境はここにあります。 –

1

は、あなただけのを交換する代わりに、1の代わりに、0からループを開始したり、1?

/* Take care of the top */ 
for (int i=1;i<n;i++) { 
関連する問題