ねえ、 私のコードはスパイラル行列に値を設定しています。 行が列= のときはうまく動作しますが、違うときは最初のスパイラル曲げにエラーが発生します。 私はブレークポイントでデバッグしようとしましたが、間違ったものを見つけることができませんでした! 私のコードに関するいくつかの追加のヒント: bentCounterは、行または列がいっぱいになったときを探し、そうであればjをインクリメントして渦巻きを渦巻きます。 j ++の場合、配列BとCの次の要素が使用されるため、配列のインデックスp、qの方向が変更されます。 fillされた行の後ろにcolumnがあると、サブ行列はそのままになります。 m-; j = 3の場合、新しいスワールを開始するには無効にする必要があります。 十分にはっきりしていることを願っています!スパイラル行列アルゴリズムの問題
static void Main(string[] args)
{
//n - quantity of rows, m - quantity of columns
// p,q - references to current element of The Matrix A[][]
// p=1, q=3 ----> A[0][3] - the element of crossing first row and fourth column
int p = 0;
int q = 0;
int j = 0;
int a = 0;
int b = 0;
int bentCounter = 0;
a = int.Parse(Console.ReadLine());
b = int.Parse(Console.ReadLine());
int n = a;
int m = b;
int mn = m * n;
int [,] A = new int [a,b];
int[] B = new int[] { 0, 1, 0, -1 };
int[] C = new int[] { 1, 0, -1, 0 };
for (int i = 0; i < mn ; i++)
{
bentCounter++;
if (bentCounter == n) {j++;}
if (bentCounter == m + n - 1)
{
if (j == 3) { j = -1; }
j++;
bentCounter = 0;
n--; m--;
}
A [p,q] = i;
p += B[j];
q += C[j];
}
for (int r = 0; r < A.GetLength(0); r++)
{
for (int c = 0; c < A.GetLength(1); c++)
{
Console.Write(" " + A[r, c] + " ");
}
Console.WriteLine();
}
10倍ディメンションに間違った方法をインクリメントし、範囲外のつもり
これは右、宿題のですか?あなたが投稿した他の質問を見て、CSコースのイントロで見られる問題と一致しています。あなたのTAと話したいことはありますか? – plinth