2016-10-23 13 views
1

最小輪郭の*アウトラインで中空ダイヤモンドパターンを印刷しようとしていますか?私は2つのループで最適化しました。 2つのループ最小ループでcで中空ダイヤモンドパターンの印刷を最適化する

Enter no of rows: 5 
*********** 
***** ***** 
**** **** 
***  *** 
**  ** 
*   * 
**  ** 
***  *** 
**** **** 
***** ***** 
*********** 

を使用して

私の出力は、まだこのコードを最適化する他の方法はありますか?あなたは(row<=n?row:(row-2*k))は、内部ループ変数に依存しないことを考え出すことで多くの時間を節約することができ

+1

(も速く、おそらくここで結構ですputcharによって肥大化しprintfを交換し、そして)「最小ループは」「ループの最小数」、または何か他のものを意味するのでしょうか?そして、おそらくこの質問は "プログラミングパズル&コードゴルフ"サイトに適していますか? –

+0

「最適化」とは時間がかかりますか?そうでない場合は、このコメントを無視してください。もしそうなら、 'printf'はあなたがここにあるものよりも時間のオーダーを取ることを理解していますか?そして、概念的に複雑かもしれないという理由だけでループが本質的に遅いのではないことを理解していますか? –

答えて

1

void main() 
{ 
     int row,col,n,k; 

     printf("Enter no of rows: "); 
     scanf("%d",&n); 

     for(row=0, k=1; row<=2*n; row>n?k++:k, printf("\n"), row++) 
       for(col=-n; col<=n; col++) 
         (col>0?col:-col) < (row<=n?row:(row-2*k)) ? printf(" ") : printf("*"); 
} 

は「

だからそれを書く:

int row,col,n,k; 

printf("Enter no of rows: "); 
scanf("%d",&n); 

for(row=0, k=1; row<=2*n; row>n?k++:k, putchar('\n'), row++) 
{ 
    int z=(row<=n?row:(row-2*k)); 
    for(col=-n; col<=n; col++) 
     putchar((col>0?col:-col) < z ? ' ' : '*'); 
} 

が同等ですしかし、テストはずっと少なくなります(2つのprintfではなく、printfの中で三項式を使う方が良い方法に注意してください)。

関連する問題