【发布时间】:2021-03-22 11:28:20
【问题描述】:
我有一个程序,其中字段有数字,玩家逐渐从右侧或左侧移除两个元素或一个,玩家轮流。我想计算所有组合(玩家总和)。为什么我有时会在这里得到毫无意义的结果?
#include <stdio.h>
int rekurze(int *mince, int start, int last, int playerA, int playerB, int player)
{
if (start < last)
{
if (player)
{
if(last-start == 1)
{
rekurze(mince, start+1, last, playerA, playerB+mince[start], 1);
rekurze(mince, start, last-1, playerA, playerB+mince[last], 1);
}
rekurze(mince, start+2, last, playerA+mince[start]+mince[start+1], playerB, 0);
rekurze(mince, start+1, last, playerA+mince[start], playerB, 0);
rekurze(mince, start+1, last-1, playerA+mince[start]+mince[last], playerB, 0);
rekurze(mince, start, last-1, playerA+mince[last], playerB, 0);
rekurze(mince, start, last-2, playerA+mince[last]+mince[last-1], playerB, 0);
}
else
{
if(last-start == 1)
{
rekurze(mince, start+1, last, playerA, playerB+mince[start], 1);
rekurze(mince, start, last-1, playerA, playerB+mince[last], 1);
}
rekurze(mince, start+2, last, playerA, playerB+mince[start]+mince[start+1], 1);
rekurze(mince, start+1, last, playerA, playerB+mince[start], 1);
rekurze(mince, start+1, last-1, playerA, playerB+mince[start]+mince[last], 1);
rekurze(mince, start, last-1, playerA, playerB+mince[last], 1);
rekurze(mince, start, last-2, playerA, playerB+mince[last]+mince[last-1], 1);
}
}
else if(start==last)
{
if(player)
playerA += mince[start];
else
playerB += mince[start];
}
printf("Skore A: %d, ", playerA);
printf("Skore B: %d\n", playerB);
}
int main (void)
{
int mince[] = {3,5,3};
int konec = (sizeof(mince)/sizeof(int))-1;
int start = 0;
rekurze (mince, start, konec, 0, 0, 1);
}
【问题讨论】:
-
看答案,我建议养成使用一致缩进的习惯。实际上你做了非常严格的缩进,即使有问题的行也在与答案匹配的缩进处。但是您没有对缩进深度和与最近的
}的错误关系之间的明显冲突做出反应。有一个根深蒂固的习惯,这会让你很明显。
标签: arrays c function recursion combinations