-6

私は質問がどこから来たのか覚えていません..しかし、私は次のことを経験しました:

ユーザーが 3 を入力した場合

出力は次のようになります。

1*2*3*10*11*12
--4*5*8*9--
----6*7----

5の場合

それから、

1*2*3*4*5*26*27*28*29*30
--6*7*8*9*22*23*24*25--
----10*11*12*19*20*21----
------13*14*17*18------
--------15*16--------

ご覧のとおり、数値を上から下に出力し、次に下から上に出力しています。C setw()++ のような書式設定型関数を使用することはできません。

同じアルゴリズム/ロジックを教えてください..ありがとう..

4

4 に答える 4

2

M = n*(n+1) の数字を次のようなパターンで印刷するだけです..

n=5 m=30 とすると、

リスト = 1,2,3,4,5,.....26,..30

行 (1) have (リストの最初の n 個の数字に続く最後の n 個の数字)

行 (1) =(1,2..5)(26..30)

更新リスト=6,7,..25

行 (2) have (最初の n-1 の数字に続いて n-1 のリストの数字)

同様に、Line(k) にはリスト内の (最初の (n+1-k) 番号の後に最後の (n+1-k) 番号が続く) があります。

リストの)

成形ラインのリストを継続的に更新し、必要なパターンで印刷するだけです。

于 2013-04-24T08:42:47.807 に答える
1

問題を行に分割します。与えられた数が であると仮定しnます。

最初の行はサイズ2n(この V1 では変数) であり、最初のn数値は1通過n(この V2 では変数) であり、次の n 数値はn*n+1通過n*n+n(この V3 では変数)であることがわかります。

2 行目はサイズな2n-2ので、1行n-1目は前の V1 の続きで、2 行目n-1n*(n-1)スルーn*(n-1)+nです。

残りの行に対してこれを行います..

最後の行は で終わる必要があり(n-1) == 1ます。

デモ: n = 5 の場合、最初のメジャー ループ

1.2.3.4.5.26.27.28.29.30

2 番目のメジャー ループ

--6.7.8.9.22.23.24.25--

3 番目のメジャー ループ

----10.11.12.19.20.21.

4rt

------13.14.17.18------

5位

--------15*16--------

Cの例について

#include<stdio.h>
int main()
{
    int num = 7,
        //linesize = 2*num,  
        //space = 0,
        fst = 1,
        snd = 0;

  if(num%2)                              //for odd n
    snd = (((num*num)+num)/2)+1;
  else                                     //for even n
    snd = (((num*num)+num)/2);  

const int diff = (num*num)-snd+1; //needed to offset snd from its value and print the temporary

//printf("%d\n",snd);    //debug
for(int i = 0 ; i < num ; i++)
{
    //linesize = 2*(num-i);                   // no of elements to print per line, debug
    //space = i;                                // no of space to print per line, debug
    for(int k = 0 ;k <i;k++)printf("   ");   //space before the values

    for(int j = 0;j<(num-i);j++)
    {
        printf("%d  ",fst++); //print fst n numbers
    }

    //printf(" ");

    for(int j = 0;j<(num-i);j++)
    {
            printf("%d  ",snd+j+diff); // print second n numbers
    }
    snd -= (num-(i+1)); //decrement snd
    for(int k = 0 ;k <i;k++)printf("   ");
    printf("\n");
}
return 0;
}
于 2013-04-24T08:50:13.247 に答える
1
Max value = sum for n=1 to R ( n + 2 )
Where R is the user supplied value

e.g. R=5 Max Value = 2 + 4 + 6 + 8 + 10 = 30

so lowest row = Max Value / 2 : (15), Max Value / 2 + 1: (16), 
entity count = 2

next row
LHS = 15-2, 15-1
RHS = 16+1, 16+2
entity count = 4 (it always goes up 2 entities at a time)

and repeat until you get a 1 at LHS first value

手がかりは十分ですか?

于 2013-04-24T08:44:33.667 に答える