Python翻译成C语言

img


来个朋友把这个Python程度翻译成C语言 本人只会C语言 不太看得懂这个python的程序

【以下回答由 GPT 生成】

#include <stdio.h>

int number_of_paths(int n, int m, int X, int y) {
    int horse_moves[8][2] = {{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};
    int dp[n+1][m+1];
    for (int i = 0; i < n+1; i++) {
        for (int j = 0; j < m+1; j++) {
            dp[i][j] = 0;
        }
    }
    dp[0][0] = 1;
    dp[X][y] = -1;
    for (int k = 0; k < 8; k++) {
        int dx = horse_moves[k][0];
        int dy = horse_moves[k][1];
        int hx = X + dx;
        int hy = y + dy;
        if (hx >= 0 && hx <= n && hy >= 0 && hy <= m) {
            dp[hx][hy] = -1;
        }
    }
    for (int i = 0; i < n+1; i++) {
        for (int j = 0; j < m+1; j++) {
            if (dp[i][j] == -1) {
                continue;
            }
            if (i > 0) {
                dp[i][j] += dp[i-1][j] > 0 ? dp[i-1][j] : 0;
            }
            if (j > 0) {
                dp[i][j] += dp[i][j-1] > 0 ? dp[i][j-1] : 0;
            }
        }
    }
    return dp[n][m];
}

int main() {
    int n = 8;
    int m = 8;
    int X = 2;
    int y = 3;
    int paths = number_of_paths(n, m, X, y);
    printf("Number of paths: %d\n", paths);
    return 0;
}

使用C语言来实现上述Python代码的功能。在C语言中,我们使用二维数组来表示dp表并进行初始化,使用嵌套循环实现路径数量的计算。在C语言中,数组下标从0开始,因此需要对原始的Python代码进行一些调整来适应这个区别。最终,代码将打印出路径的数量。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

代码不完整,只能看出来想计算从坐标(0, 0)到坐标(n, m)的路径数量,玩家能向右或向下移动。建议你贴完整吧。


#include <stdlib.h>

int number_of_paths(int n, int m, int x, int y)
{
    int horse_moves[8][2] = {{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};
    int rst = 0, i, j;

    // 动态数组
    int **dp = (int **)calloc(n + 1, sizeof(int *));
    for (i = 0; i < n + 1; i++)
        dp[i] = (int *)calloc(m + 1, sizeof(int));

    dp[0][0] = 1;

    dp[x][y] = -1;
    int h_x, h_y;
    for (i = 0; i < 8; i++)
    {
        h_x = x + horse_moves[i][0];
        h_y = y + horse_moves[i][1];
        if (h_x >= 0 && h_x < n + 1 && h_y >= 0 && h_y < m + 1)
            dp[h_x][h_y] = -1;
    }

    for (i = 0; i < n + 1; i++)
    {
        for (j = 0; j < m + 1; j++)
        {
            if (dp[i][j] == -1)
                continue;

            if (i > 0)
                dp[i][j] += (dp[i - 1][j] > 0) ? dp[i - 1][j] : 0;

            if (j > 0)
                dp[i][j] += (dp[i][j - 1] > 0) ? dp[i][j - 1] : 0;
        }
    }

    rst = dp[n][m];

    for (i = 0; i < n + 1; i++)
        free(dp[i]);
    free(dp);
    return rst;
}
#include <stdio.h>

int number_of_paths(int n, int m, int x, int y) {
    // 马在8个可能的移动位置
    int horse_moves[8][2] = {{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};

    // 初始化动态规划数组
    int dp[n+1][m+1];
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            dp[i][j] = 0;
        }
    }

    // 设置原点为1,因为从原点开始
    dp[0][0] = 1;

    // 标记马及其8个可能移动位置为-1,表示障碍物
    dp[x][y] = -1;
    for (int k = 0; k < 8; k++) {
        int hx = x + horse_moves[k][0];
        int hy = y + horse_moves[k][1];
        if (0 <= hx && hx <= n && 0 <= hy && hy <= m) {
            dp[hx][hy] = -1;
        }
    }

    // 动态规划计算路径数
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            if (dp[i][j] == -1) {
                continue;
            }
            // 更新路径数量,只能向右或向下移动
            if (i > 0) {
                dp[i][j] += (dp[i-1][j] > 0) ? dp[i-1][j] : 0;
            }
            if (j > 0) {
                dp[i][j] += (dp[i][j-1] > 0) ? dp[i][j-1] : 0;
            }
        }
    }

    // 返回从原点到B点的路径数
    return dp[n][m];
}

int main() {
    int n = 5;
    int m = 6;
    int x = 2;
    int y = 3;
    int result = number_of_paths(n, m, x, y);
    printf("Number of paths: %d\n", result);

    return 0;
}

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

功能需求总结下,相当于c重写一遍

你可以试试 我提供的


// 定义一个函数,用于计算从(0,0)到(x,y)的路径数
int number_of_paths(int x, int y) {
    // 定义一个变量,用于存储结果
    int result = 0;
    // 如果x或y为0,表示只有一条路径,返回1
    if (x == 0 || y == 0) {
        return 1;
    }
    // 否则,使用递归的方式,计算从(0,0)到(x-1,y)和(x,y-1)的路径数之和,作为结果返回
    else {
        result = number_of_paths(x - 1, y) + number_of_paths(x, y - 1);
        return result;
    }
}

#include <stdio.h>
#include <stdlib.h>

// 用于表示马在8个可能的移动位置
int horse_moves[8][2] = {
    {-1, -2}, {-2, -1}, {-2, 1}, {-1, 2},
    {1, 2}, {2, 1}, {2, -1}, {1, -2}
};

int number_of_paths(int n, int m, int x, int y) {
    // 初始化二维动态规划数组
    int dp[n + 1][m + 1];
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            dp[i][j] = 0;
        }
    }
    // 设置原点为1,因为从原点开始
    dp[0][0] = 1;
    // 标记马及其8个可能移动位置为-1,表示障碍物
    dp[x][y] = -1;
    for (int k = 0; k < 8; k++) {
        int h_x = x + horse_moves[k][0];
        int h_y = y + horse_moves[k][1];
        if (h_x >= 0 && h_x <= n && h_y >= 0 && h_y <= m) {
            dp[h_x][h_y] = -1;
        }
    }
    // 填充动态规划数组
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            if (dp[i][j] == -1) {
                continue; // 跳过马和其8个可能的移动位置
            }
            // 更新路径数量,只能向右或向下移动
            if (i > 0) {
                dp[i][j] += (dp[i - 1][j] > 0) ? dp[i - 1][j] : 0;
            }
            if (j > 0) {
                dp[i][j] += (dp[i][j - 1] > 0) ? dp[i][j - 1] : 0;
            }
        }
    }
    return dp[n][m];
}

int main() {
    int n, m, x, y;
    printf("Enter n, m, x, y: ");
    scanf("%d %d %d %d", &n, &m, &x, &y);
    int result = number_of_paths(n, m, x, y);
    printf("Number of paths: %d\n", result);
    return 0;
}


#include <stdio.h>
 
int number_of_paths(int n, int m, int X, int y) {
    int horse_moves[8][2] = {{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};
    int dp[n+1][m+1];
    for (int i = 0; i < n+1; i++) {
        for (int j = 0; j < m+1; j++) {
            dp[i][j] = 0;
        }
    }
    dp[0][0] = 1;
    dp[X][y] = -1;
    for (int k = 0; k < 8; k++) {
        int dx = horse_moves[k][0];
        int dy = horse_moves[k][1];
        int hx = X + dx;
        int hy = y + dy;
        if (hx >= 0 && hx <= n && hy >= 0 && hy <= m) {
            dp[hx][hy] = -1;
        }
    }
    for (int i = 0; i < n+1; i++) {
        for (int j = 0; j < m+1; j++) {
            if (dp[i][j] == -1) {
                continue;
            }
            if (i > 0) {
                dp[i][j] += dp[i-1][j] > 0 ? dp[i-1][j] : 0;
            }
            if (j > 0) {
                dp[i][j] += dp[i][j-1] > 0 ? dp[i][j-1] : 0;
            }
        }
    }
    return dp[n][m];
}
 
int main() {
    int n = 8;
    int m = 8;
    int X = 2;
    int y = 3;
    int paths = number_of_paths(n, m, X, y);
    printf("Number of paths: %d\n", paths);
    return 0;
}

Python程序如何编译成C语言?怎么将Python编译成C语言
可以参考下


Python程序如何编译成C语言?怎么将Python编译成C语言 - 优草派 在使用python这个语言进行编程时就可以体验到简洁和代码量小,并且随时运行的方便之处。但是因为它解释性语言的特点让python在诸多语言的运行速度比较中都是很慢的,而c语言的运行速度基本上是python的三倍之多,下面会介绍python编译成c语言的方法。 https://www.ycpai.cn/python/yd95mkIv.html

引用 皆我百晓生 小程序回复内容作答:

#include <stdio.h>

int number_of_paths(int n, int m, int x, int y) {
    int horse_moves[8][2] = {{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};
    int dp[n + 1][m + 1];
    
    // 初始化动态规划数组
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            dp[i][j] = 0;
        }
    }
    
    // 设置原点为1,因为从原点开始 dp[0][0] = 1
    dp[0][0] = 1;
    
    // 标记马及其8个可能移动位置为-1,表示障碍物 dp[x][y] = -1
    for (int k = 0; k < 8; k++) {
        int hx = x + horse_moves[k][0];
        int hy = y + horse_moves[k][1];
        if (hx >= 0 && hx <= n && hy >= 0 && hy <= m) {
            dp[hx][hy] = -1;
        }
    }
    
    // 填充动态规划数组
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            if (dp[i][j] == -1) {
                // 跳过马和其8个可能的移动位置
                continue;
            }
            // 更新路径数量,只能向右或向下移动
            if (i > 0) {
                dp[i][j] += (dp[i - 1][j] > 0) ? dp[i - 1][j] : 0;
            }
            if (j > 0) {
                dp[i][j] += (dp[i][j - 1] > 0) ? dp[i][j - 1] : 0;
            }
        }
    }
    
    // 返回从原点到 B 点的路径数
    return dp[n][m];
}

int main() {
    int n = 5;
    int m = 5;
    int x = 1;
    int y = 2;
    
    int result = number_of_paths(n, m, x, y);
    printf("Number of paths: %d\n", result);
    
    return 0;
}