为什么我的for循环未创建所有可能的组合?

时间:2018-06-28 18:10:26

标签: c#

我正在尝试制作“锁饼干”,以便在简历中保留一些东西,以便在明年夏天获得实习机会。

锁中的每个“转轮”包含5个字母,这些字母存储在charLists中。我有5个“轮子”,我正在尝试从5个轮子中获取所有可能的连击。实际上,组合锁每个“滚轮”有10个字母,但我试图使迭代正常工作。但是,似乎我的代码在每次迭代中只显示相同的值。

我的代码:

totalList.Add("");
for (int i = 0; i < one.Count; i++)
{

    int a = i;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;

    for (int ii = 0; ii < two.Count; ii++)
    {
        b = ii;
        for (int iii = 0; iii < three.Count; iii++)
        {
            c = iii;
            for (int iv = 0; iv < four.Count; iv++)
            {
                d = iv;
                for (int v = 0; v < five.Count; v++)
                {
                    e = v;
                    string myString = "" + one[a] + two[b] + three[c] + four[d] + five[e];
                    totalList.Add(myString);
                }
            }
        }
    }
}

Visual

2 个答案:

答案 0 :(得分:0)

fyi-这是编写包含初始化代码的简短方法。 for循环很好,我实际上推荐您的花括号({}),但是a,b,c,d,e var完全多余(您可以使用循环计数器)。同样,List也可以使用。  无论如何...较短的版本:

        char[] w1 = { 'a', 'b', 'c', 'd', 'e' };
        char[] w2 = { 'f', 'g', 'h', 'i', 'j' };
        char[] w3 = { 'k', 'l', 'm', 'n', 'o' };
        char[] w4 = { 'p', 'q', 'r', 's', 't' };
        char[] w5 = { 'u', 'v', 'w', 'x', 'y' };
        List<string> totalString = new List<string>();
        foreach (var c1 in w1)
            foreach (var c2 in w2)
                foreach (var c3 in w3)
                    foreach (var c4 in w4)
                        foreach (var c5 in w5)
                            totalString.Add( "" + c1 + c2 + c3 + c4 + c5);

答案 1 :(得分:0)

您可以考虑问题的性质,通过一个循环来处理。仅在底数5(在这种情况下)中,逐步遍历所有可能的轮子组合就像计数。您可以用二进制进行计数,然后将每个数字转换为以5为底的数字,以转换为车轮位置组。

注意:如果轮子的数字位数不同,则可以更改为使用轮子尺寸数组来拉出每个数字。

pd.DataFrame(data = y_XXXX) = r_XXXX
r_XXXX = r_XXXX.T
相关问题