我正在建立公牛队和公牛队。 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;
}
答案 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;
}
}
}
我将答案作为一个问题发布,因为上次我以不同的方式编辑问题而且人们不满意