我正在尝试编写一个代码,用于仅使用递归检查数组geusses
中存在多少个数组battelships
我无法理解为什么函数checkCellsHit(int bships[],int lengthBS,int guesses[],int lengthG)
不起作用。
函数checkHit(int battleships[], int length, int guess)
正常运行并检查guess
中是否存在battelships
个数字。
请注意,每个用户输入都以negativ编号结尾。 为了即时:
Player 1 battleship locations:
0 5 10 2 3 4 7 -3
Player2 guesses:
11 12 13 -4
Battleship cells hit: 0
-
#include <stdio.h>
#define MAX 200`
int checkHit(int battleships[], int length, int guess){
int value=0;
if (battleships[0]<0) {
return 0;
}
if (battleships[0]==guess) {
return 1;
}
else {
value=checkHit((battleships+1), (length-1), guess);
return value;
}
}
int checkCellsHit(int bships[],int lengthBS,int guesses[],int lengthG){
int count=0;
if (bships[0]<0) {
return 0;
}
if (checkHit(bships, lengthBS, guesses[0])) {
count++;
}
count=count+checkCellsHit(bships, lengthBS-1, guesses+1, lengthG-1);
return count;
}
int main(){
int battelships[MAX]={0}, guess[MAX]={0};
int i=0,j=0, value;
printf("Player1 battleship locations:\n");
scanf("%d", &battelships[i]);
for (i=1; battelships[i-1]>=0; i++) {
scanf("%d", &battelships[i]);
}
printf("Player2 guesses::\n");
scanf("%d", &guess[j]);
for (j=1; battelships[j-1]>=0; j++) {
scanf("%d", &guess[j]);
}
value=checkCellsHit(battelships, i, guess, j);
printf("%d", value);
return 0;
}
答案 0 :(得分:1)
我认为你的问题在于
count=count+checkCellsHit(bships, lengthBS-1, guesses+1, lengthG-1);
在checkCellsHit
{p>你越过巴特尔船只和猜测。你递归的下一步,你需要减少猜测而不是战列舰。
所以更改为以下代码应该修复它
count=count+checkCellsHit(bships, lengthBS, guesses+1, lengthG-1);