-2

この問題は C# のコーディング中に直面しましたが、その答えはどのプログラミング言語にも当てはまると思います。

複数のネストされたループが必要です (9 としましょうが、100 にすることもできます)。私のコードは次のように実行する必要があります。

for (a1=0;a1<N;a1++)
for (a2=0;a2<N;a2++)
...
for (a9=0;a9<N;a9++)
   //do something

このコードは、a1、a2、a3、... の代わりに変数M=9と int 配列を使用することで短くできると思います。a[]

ヒントを教えていただけますか?

編集: これを行うためにネストされたループを使用する必要がないことはわかっています。M=9変数int 配列a[]とより少ないコードを使用してこれを行うことができるかどうかを尋ねているだけです。

本当に複雑なものを見る必要がある場合は、次のコードを書きました。

        string[] s1 = new string[3]{ "apples", "oranges","bananas" };
        string[] s2 = new string[5] { "are", "are not", "should be", "must be","seem to be" };
        string[] s3 = new string[3] { "big", "small", "tasty" };

        int[] a=new int[10];
        int[] step = new int[10];
        step[1] = 1; step[2] = 1; step[3] = 2;
        for (a[1] = 0; a[1] < s1.Length; a[1]+=step[1])
            for (a[2] = 0; a[2] < s2.Length; a[2]+=step[2])
                for (a[3] = 0; a[3] < s3.Length; a[3]+=step[3])
                    Console.WriteLine(s1[a[1]] + " " + s2[a[2]] + " " + s3[a[3]]);

s4、s5、... s10 などの配列がさらにあると想像してください。(これは、配列の配列s[]、または 2 次元配列の可能性がありますs[,]

4

2 に答える 2

5

制限配列は、各コンポーネントの上限を定義します (-1、for ループの < N に相当)。components 配列は、各コンポーネントの値を保持します。

int[] limits = { 9, 20, 15, 30, 8, 40, 10 };
int[] components = new int[limits.Length];

bool done = false;
while (!done)
{
    //do work here using the components
    int M = components[0];
    int N = components[1];
    int O = components[2];
    int P = components[3];
    //etc
    //first iteration M=0,N=0,O=0, etc

    //this part does the incrementing for the next iteration
    for (int j = 0; j < limits.Length; j++)
    {
        components[j]++;
        if (components[j] < limits[j])
            break;
        components[j] = 0;
        if (j == limits.Length - 1)
            done = true;
    }
}
于 2013-10-22T14:25:04.400 に答える
0

あなたのコード

for (a1=0;a1<N;a1++)
for (a2=0;a2<N;a2++)
...
for (a9=0;a9<N;a9++)

これで置き換えることができます:

    int M = 9;
    int N = 20;
    int index = 0;


    for (int x = 0; x < M; x++)
    {
        for (int y = 0; y < N; y++)
        {
            // do something
            // perhaps a[index++] = some value;
        }
    }

あなたの問題にはもっと良い解決策がありますが、これがあなたが求めているものだと思います。

于 2013-10-22T13:58:22.273 に答える