求问为什么这个代码运行不了?
题目如下
#include<stdio.h>
int zolu(int n[], int ma[], long long sum);
int main(void)
{
long long sum = 0;
int n[2]/*目标点*/, ma[2]/*马*/;
scanf_s("%d%d%d%d",&n[0], &n[1], &ma[0], &ma[1]);
sum = zolu(n, ma, sum);
printf("%lld", sum);
return 0;
}
int zolu(int n[], int ma[], long long sum) //从终点开始,一个zolu函数表示遍历一个点上的两种选择,递归
{
//保留源路径,制造探路数组
int n1[2];
n1[0] = n[0];
n1[1] = n[1];
for (int i = 0; i < 2; i++) //0,1分别代表向左/上
{
if (n1[0] == 0 && n1[1] == 0) //到起点算一条路径,加一
{
sum++;
continue;
}
if (i == 0)
{
n1[0]--;
if (n[0] >= 0/*不越过边界*/ && (n[0] != ma[0] || n[1] != ma[1])/*不碰马*/ && (n[0] - ma[0]) * (n[0] - ma[0]) + (n[1] - ma[1]) * (n[1] - ma[1]) != 5)//用距离不为5表示不经过马拦路点
{
sum = zolu(n1, ma, sum);
}
}
if (i == 1)
{
n1[1]--;
if (n[1] >= 0 && (n[0] != ma[0] || n[1] != ma[1]) || (n[0] - ma[0]) * (n[0] - ma[0]) + (n[1] - ma[1]) * (n[1] - ma[1]) != 5)
{
sum = zolu(n1, ma, sum);
}
}
}
}
【以下回答由 GPT 生成】
问题出在#include相关的问题。在C语言中,使用#include来引入头文件,头文件中定义了函数的原型和相关的宏定义。在这个代码中,使用了#include 来引入stdio.h头文件,表示要使用标准输入输出函数。
然而,代码中使用了scanf_s函数来获取输入,而scanf_s函数并不是标准C库函数,它是一个安全版本的scanf函数,适用于微软的编译器。因此,在其他编译器上可能会报错。根据代码中的#include ,推测你的代码可能是在非微软编译器上运行的,所以才无法运行。
解决方案之一是将scanf_s函数修改为标准的scanf函数。修改如下:
scanf("%d%d%d%d", &n[0], &n[1], &ma[0], &ma[1]);
另外,还需要给zolu函数加上返回值,因为zolu函数的返回值类型是int,但是在代码中并没有返回任何值。解决方案如下:
int zolu(int n[], int ma[], long long sum)
{
//函数的实现
return sum;
}
修改了这两处之后,代码应该就可以正常运行了。
【相关推荐】
供参考:
#include <stdio.h>
#include <string.h>
int main()
{
int i, j, n1, m1, n2, m2;
long long dp[30][30];
memset(dp, -1, sizeof(dp));
scanf("%d %d %d %d", &n1, &m1, &n2, &m2);
for (i = 0; i < n1 + 1; i++)
dp[i][m1 + 1] = 0;
for (i = 0; i < m1 + 1; i++)
dp[n1 + 1][i] = 0;
dp[n1][m1] = 1;
for (i = n1; i >= 0; i--) {
for (j = m1; j >= 0; j--) {
if ((i - n2) * (i - n2) + (j - m2) * (j - m2) == 5 || i == n2 && j == m2)
dp[i][j] = 0;
if (dp[i][j] == -1)
dp[i][j] = dp[i][j + 1] + dp[i + 1][j];
}
}
printf("%lld", dp[0][0]);
return 0;
}