重复代码,需要缩短代码

时间:2013-12-17 20:51:08

标签: c

我正在建立公牛队和公牛队。 C中的Cows程序和我有一个代码,我不得不重复几次(14准确= 14种可能性),我想让我现在粘贴的代码更短。有人可以帮助我并解释如何做到这一点吗?

//------------------------------0 B 0 C----------------------------------//

for (i=0; i<1296; i++)
{
    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=0;
        s[4]=0;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][0]=counter;

    }

//------------------------------0 B 1 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=0;
        s[4]=1;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][1]=counter;

    }

//------------------------------0 B 2 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=0;
        s[4]=2;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][2]=counter;

    }

//------------------------------0 B 3 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=0;
        s[4]=3;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][3]=counter;

    }

//------------------------------0 B 4 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=0;
        s[4]=4;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][4]=counter;

    }

//------------------------------1 B 0 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=1;
        s[4]=0;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][5]=counter;

    }

//------------------------------1 B 1 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=1;
        s[4]=1;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][6]=counter;

    }

//------------------------------1 B 2 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=1;
        s[4]=2;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][7]=counter;

    }

//------------------------------1 B 3 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=1;
        s[4]=3;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][8]=counter;

    }

//------------------------------2 B 0 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=2;
        s[4]=0;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][9]=counter;

    }

//------------------------------2 B 1 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=2;
        s[4]=1;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][10]=counter;

    }

//------------------------------2 B 2 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=2;
        s[4]=2;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][11]=counter;

    }

//------------------------------3 B 0 C----------------------------------//

    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=3;
        s[4]=0;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][12]=counter;

    }

//------------------------------4 B 0 C----------------------------------//
    for (j=0; j<1296; j++)
    {
        counter = 0;
        s[0]=4;
        s[4]=0;

        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][13]=counter;

    }

2 个答案:

答案 0 :(得分:0)

重复代码中唯一的变化是table[i][0]=counter;行。 将硬编码索引值更改为函数参数,并编写包含公共代码的函数。

void blammy(int blammyIndex)
{
    // assumes you make counter, s, remain, f available as needed.

    for (i=0; i<1296; i++)
    {
        for (j=0; j<1296; j++)
        {
            counter = 0;
            s[0]=0;
            s[4]=0;

            if (remain[j][0]!=-1)
            {
                feed(poss[i], remain[j], f);
                if (f[0]==s[0] && f[4]==s[4])
                {
                    counter++;
                }
            }
            table[i][blammyIndex]=counter;
        }
    }
}

答案 1 :(得分:0)

好的,所以让我们说从以前的问题中得到我与此类似的东西我理解这段代码会有所帮助。如果我在我的第一个代码中看到我有{0,0} {0,1} {0,2} {0,3} {0,4} {2,0} ....我需要把它放在一个while循环中吗?因为我不能拥有这个:{2,3}或{3,1}或{4,0}。 不知道我是否清楚请让我知道,我感谢所有答案

for (i=0; i<1296; i++)
  {
       for (int k=0; k<15; ++k)
   {
    s[0]=0;
    s[4]=k;
    for (j=0; j<1296; j++)
    {
        counter = 0;
        if (remain[j][0]!=-1)
        {
            feed(poss[i], remain[j], f);
            if (f[0]==s[0] && f[4]==s[4])
            {
                counter++;
            }
        }
        table[i][k]=counter;
      }
   }
}

我将答案作为一个问题发布,因为上次我以不同的方式编辑问题而且人们不满意