4

私はこのようなパターンを印刷しようとしています

*******
*     *
*     *
*     *
*     *
*     *
*******

これで、空のボックスのように見えるはずです。しかし、どういうわけか私はそれ以上近づいていません

ここまでコーディングした

#include <iostream>
using namespace std;

int main( int argc, char ** argv ) {
for(int i=1;i<=7;i++)
{
    for(int j=1;j<=7;j++)
    {
        if(j==1||j==7)
        printf("*");
        else printf(" ");
    }

    printf("\n");
}
return 0;
}

そして私の出力は

*     *
*     *
*     *
*     *
*     *
*     *
*     *

for ループのみを使用するとよいでしょう。

4

15 に答える 15

11
if(j==1||j==7)
printf("*");
else printf(" ");

このロジックは、最初と最後の行を除くすべての行で機能します。したがって、行の値を考慮し、最初と最後の行を特別にチェックする必要があります。これら2つにはスペースがありません。

[それが宿題だと仮定して、私はただのヒントを与えています。これでほぼ完了です。これを機能させるには、上記のヒントで十分です。]

于 2013-03-09T15:32:11.057 に答える
6

条件は次のifとおりです。

if (i==1 || i==7 || j==1 || j==7)

つまり、最初または最後の行と、最初または最後の列のどちらにいるのかを確認してから、*.

于 2013-03-09T15:28:45.390 に答える
2

あなたはとても近いです。問題は次の行にあります。

    if(j==1||j==7)

上段と下段も考慮されるように変更してください。

幸運を

于 2013-03-09T15:31:22.690 に答える
2

最初の行と最後の行で異なる動作をする必要があります。

int W = 7, H = 7;
for(int i=0;i<=H;i++)
{
  for(int j=0;j<=W;j++)
  {
     // if row is the first or row is the last or column is the first of column is the last
     if (i == 0 || i == H-1 || j == 0 || j == W-1)
       printf("*");
     else printf(" ");
  }

  printf("\n");
}
于 2013-03-09T15:28:37.813 に答える
1

私はプログラミングの専門家ではないので、次の簡単なコードを思いつきました。

#include <stdio.h>

int main(void)
{
    int i,j,k,n;

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

    for(i=0; i<n; i++)
    {
        if(i == 0 || i == (n-1))
        {
            for(j=0; j <n-1; j++)
                printf("*");
        }              
        else
        {
            for(k=0; k<n; k++)
            {
                if (k == 0 || k == (n-2))
                    printf("*");
                else
                    printf(" ");
            }
        }

        printf("\n");
    }

    return 0; 
}
于 2013-08-07T18:14:33.060 に答える
1

この関数は正常に動作します:

#include <iostream>
#include <string>

void printBox(int width, int height) {
    if (width < 2 or height < 1) return;
    for (int i = 1; i <= height; i++) {
        if (i == 1 or i == height) {
            std::string o(width, '*');
            std::cout << o << std::endl;
        } else {
            std::string o(width-2, ' ');
            o = '*' + o + '*';
            std::cout << o << std::endl;
        }
    }
}

次のように使用できます。

printBox(2, 2);

これは次を印刷します:

**
**

または次のように:

printBox(6, 4);

これは次を印刷します:

******
*    *
*    *
******
于 2013-03-09T15:35:35.937 に答える
0

ネストされたループが必要です。間に 2 つのオプションがあるため、2 つのネストされたループが必要になります。1 つはスペース用、もう 1 つは反復 1 と 7 (0 と 6) の '*' を埋めるためです。

1 行目と 7 行目を '*' で境界の星を埋めて出力します。使用する

if (i == 0 || i == 7)  // in-case you're initializing i with 0
    // loop for printf ("*");
于 2013-03-09T15:58:24.833 に答える
0
#include <iostream>
#include<iomanip>
using namespace std;

main()
{
      int Width;
      char MyChar;
      int LCV;    //Loop control
      int LCVC, LCVR;    //Loop control for LCVC=Columns LCVR=Rows

      cout<<"\nEnter Width: "; cin>>Width;
      cout<<"\nEnter a Character: "; cin>>MyChar;

      for (LCV=1;LCV<=Width;LCV++)
      {cout<<MyChar;}
      cout<<endl;
      for(LCVC=1;LCVC<=Width;LCVC++)
      { cout<<MyChar<<setw(Width-1)<<MyChar<<endl;

      }
      for (LCV=1;LCV<=Width;LCV++)
      {cout<<MyChar;}
      cout<<endl;
      system("pause");
}

/*
Enter Width: 6

Enter a Character: #
######
#    #
#    #
#    #
#    #
#    #
#    #
######
Press any key to continue . . .
*/
于 2013-08-15T03:17:42.507 に答える
0

すべての行を平等に扱っており、最初と最後の行を別々に処理する必要があるという事実を無視しています。次のようなものが必要です

if (i == 1 || i == 7)
{
    for (j=1;j<7;j++) printf("*");
    printf("\n");
}
else { /* your routine */ }
于 2013-03-09T15:30:06.050 に答える
0

コードは次のようになります。

#include <iostream>
using namespace std;

int main( int argc, char ** argv ) {
for(int i=1;i<=7;i++)
{
    for(int j=1;j<=7;j++)
    {
        if(j == 1 || j == 7)
           printf("*");
        else if (i == 1 || i == 7 ) //added this check
             printf ("*");
        else printf(" ");
    }



    printf("\n");
}
return 0;
}

実際の例

于 2013-03-09T15:30:18.727 に答える
0

このパターンを印刷して、数字を入力します=各数字、たとえば 23517 **



*


次に ** * ***** * ******** そして ** * * * ***** *


と * * * * *

于 2015-03-04T16:18:59.353 に答える
0

あなたは付け加えられます:

    `if(i==0 || i==6)
    {
    cout<<"*";
    }`
于 2021-05-12T11:25:46.593 に答える