当前位置: 首页 > article >正文

各类AI工具编程能力测试对比

各类AI工具编程能力对比

  • 现在各类AI工具火爆,擅长各类问题解决,闲来无事,验证下各类AI工具的编程能力如何。
  • 问题:c++ 实现杨辉三角,并main函数测试

kimi

  • 对话窗口输入问题,得到了c++的完整程序:
#include <iostream>
#include <vector>

// 函数用于生成杨辉三角的前n行
void generatePascalTriangle(int n) {
    std::vector<std::vector<int>> triangle;

    for (int i = 0; i < n; i++) {
        std::vector<int> row(i + 1, 1); // 每一行的开始和结束都是1
        for (int j = 1; j < i; j++) {
            // 每个数字是它上方两个数字的和
            row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
        }
        triangle.push_back(row);
    }

    // 打印杨辉三角
    for (const auto &row : triangle) {
        for (int num : row) {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    }
}

// 主函数
int main() {
    int numRows;
    std::cout << "Enter the number of rows for Pascal's Triangle: ";
    std::cin >> numRows;

    // 生成并打印杨辉三角
    generatePascalTriangle(numRows);

    return 0;
}
  • 拷贝到VS2022中验证下,运行成功,输入10,之后输出正确的结果;kimi对于简单编程能力还可以👍。
    在这里插入图片描述

文心一言

  • 对话窗口输入问题,得到完整的c++ 代码:
#include <iostream>  
#include <vector>  

using namespace std;

// 函数用于生成杨辉三角的前numRows行  
vector<vector<int>> generate(int numRows) {
    vector<vector<int>> triangle;

    for (int i = 0; i < numRows; ++i) {
        // 创建一个新行,并初始化第一个元素为1  
        vector<int> row(i + 1, 1);

        // 填充中间的元素  
        for (int j = 1; j < i; ++j) {
            row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
        }

        // 将当前行添加到杨辉三角中  
        triangle.push_back(row);
    }

    return triangle;
}

int main() {
    int numRows;
    cout << "请输入杨辉三角的行数: ";
    cin >> numRows;

    vector<vector<int>> triangle = generate(numRows);

    // 打印杨辉三角  
    for (int i = 0; i < numRows; ++i) {
        for (int j = 0; j <= i; ++j) {
            cout << triangle[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}
  • 拷贝到VS2022中验证下,运行成功,输入10,之后输出正确的结果;文心一言对于简单编程能力还可以👍。
    在这里插入图片描述

chatGPT

  • 对话窗口输入问题,得到完整的c++ 代码:main函数默认给的是5行,没有给用户自主配置权。
#include <iostream>
#include <vector>

// 生成杨辉三角
std::vector<std::vector<int>> generateYanghuiTriangle(int numRows) {
    std::vector<std::vector<int>> triangle;
    if (numRows == 0) {
        return triangle;
    }

    triangle.push_back({1});
    for (int i = 1; i < numRows; i++) {
        std::vector<int> row(i + 1, 1);
        for (int j = 1; j < i; j++) {
            row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
        }
        triangle.push_back(row);
    }

    return triangle;
}

// 打印杨辉三角
void printYanghuiTriangle(const std::vector<std::vector<int>>& triangle) {
    for (const auto& row : triangle) {
        for (int num : row) {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    }
}

int main() {
    int numRows = 5;
    std::vector<std::vector<int>> triangle = generateYanghuiTriangle(numRows);
    printYanghuiTriangle(triangle);

    return 0;
}
  • 拷贝到VS2022中验证下,将行数改成10,对齐其他的AI工具,运行成功,输入10,之后输出正确的结果;chatGPT对于简单编程能力还可以👍。
    在这里插入图片描述

讯飞星火

  • 对话窗口输入问题,居然给出了两种方法c++实现,一直二维数组,一种队列法,
    二维数组法:
#include <iostream>
using namespace std;

const int ROWS = 10; // 定义要打印的行数

void printYangHui(int yanghui[][ROWS]) {
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j <= i; j++) {
            cout << yanghui[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    int yanghui[ROWS][ROWS] = {0}; // 初始化二维数组为0

    // 设置每一行的首位和末尾都为1
    for (int i = 0; i < ROWS; i++) {
        yanghui[i][0] = 1;
        yanghui[i][i] = 1;
    }

    // 从第三行开始,每一行的数字都是它上一行的左上方和右上方两个数字之和
    for (int i = 2; i < ROWS; i++) {
        for (int j = 1; j < i; j++) {
            yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
        }
    }

    // 打印杨辉三角
    printYangHui(yanghui);

    return 0;
}

队列法:

#include <iostream>
#include <queue>
using namespace std;

// 运用队列实现杨辉三角形的函数
void yanghui(int n) {
    queue<int> q; // 初始化队列
    q.push(1);
    q.push(1);
    int s = 0, t;

    for (int i = 1; i <= n; i++) { // 逐行计算
        cout << endl;
        q.push(0);
        for (int j = 1; j <= i + 2; j++) { // 下一行
            t = q.front();
            q.pop();
            q.push(s + t);
            s = t;
            if (j != i + 2) cout << s << ' ';
        }
    }
}

int main() {
    int n = 10; // 定义要打印的行数
    yanghui(n);
    return 0;
}
  • 拷贝到VS2022中验证下,逐个验证下,二维数组法跟前面几种AI工具结果一致;但队列法好像没有算只有一个 “1”的那行,所以多了最下面的一行。更前面几种AI工具结果不一致。
    在这里插入图片描述

在这里插入图片描述

通义千问

  • 对话窗口输入问题,居然也给出了两种方法c++实现,一直二维数组,一种队列法;
    二维数组法:
#include <iostream>

void printYangHui(int rows) {
    int yanghui[rows][rows] = {0}; // 初始化二维数组为0

    for (int i = 0; i < rows; i++) {
        yanghui[i][0] = 1; // 每一行的开始都是1
        yanghui[i][i] = 1; // 每一行的结束都是1

        // 从第三行开始,每一行的数字都是它上一行的左上方和右上方两个数字之和
        for (int j = 1; j < i; j++) {
            yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
        }
    }

    // 打印杨辉三角
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j <= i; j++) {
            std::cout << yanghui[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

int main() {
    int rows = 10; // 定义要打印的行数
    printYangHui(rows);
    return 0;
}

队列法:

#include <iostream>
#include <queue>

void printYangHuiQueue(int rows) {
    std::queue<int> q; // 初始化队列
    q.push(1);

    for (int i = 0; i < rows; i++) {
        std::cout << std::endl;
        q.push(0); // 在队列末尾添加0,用于计算下一行的首元素

        int s = 0, t;
        while (!q.empty()) {
            t = q.front();
            q.pop();
            q.push(s + t);
            s = t;
            if (q.size() > 1) std::cout << s << ' ';
        }
    }
}

int main() {
    int rows = 10; // 定义要打印的行数
    printYangHuiQueue(rows);
    return 0;
}
  • 拷贝到VS2022中验证下,二维数组法报错了,无法运行,队列法虽然运行成功,但输出是错的,无限输出,看来通义千问编程能力得继续提升呀😂。
    在这里插入图片描述
    在这里插入图片描述

智谱清言

  • 对话窗口输入问题,居然也给出了两种方法c++实现,一直二维数组,一种队列法;
    二维数组法:
#include <iostream>
using namespace std;

void printYangHui(int rows) {
    int yanghui[rows][rows] = {0}; // 初始化二维数组为0

    // 设置每一行的首位和末尾都为1
    for (int i = 0; i < rows; i++) {
        yanghui[i][0] = 1;
        yanghui[i][i] = 1;
    }

    // 从第三行开始,每一行的数字都是它上一行的左上方和右上方两个数字之和
    for (int i = 2; i < rows; i++) {
        for (int j = 1; j < i; j++) {
            yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
        }
    }

    // 打印杨辉三角
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j <= i; j++) {
            cout << yanghui[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {
    int rows = 10; // 定义要打印的行数
    printYangHui(rows);
    return 0;
}

队列法:

#include <iostream>
#include <queue>
using namespace std;

void printYangHui(int n) {
    queue<int> q; // 初始化队列
    q.push(1);
    q.push(1);

    for (int i = 1; i <= n; i++) { // 逐行计算
        cout << endl;
        q.push(0);
        int s = 0, t;
        for (int j = 1; j <= i + 2; j++) { // 下一行
            t = q.front();
            q.pop();
            q.push(s + t);
            s = t;
            if (j != i + 2) cout << s << ' ';
        }
    }
}

int main() {
    int rows = 10; // 定义要打印的行数
    printYangHui(rows);
    return 0;
}
  • 拷贝到VS2022中验证下,二维数组法报错了,无法运行,报错跟通义千问一样😂;队列法成功运行,但输出结果跟讯飞星火的队列法输出结果一样😂。
    在这里插入图片描述

在这里插入图片描述

豆包

  • 对话窗口输入问题,得到完整的c++ 代码:
#include <iostream>

// 计算杨辉三角中某一行的值
int* generateRow(int rowIndex) {
    int* row = new int[rowIndex + 1];
    row[0] = 1;
    row[rowIndex] = 1;

    for (int i = 1; i < rowIndex; i++) {
        row[i] = (row[i - 1] * (rowIndex - i + 1)) / i;
    }

    return row;
}

// 打印杨辉三角的前 numRows 行
void printYangHuiTriangle(int numRows) {
    for (int i = 0; i < numRows; i++) {
        int* row = generateRow(i);
        for (int j = 0; j <= i; j++) {
            std::cout << row[j] << " ";
        }
        std::cout << std::endl;
        delete[] row;
    }
}

int main() {
    int numRows = 10;
    printYangHuiTriangle(numRows);

    return 0;
}
  • 拷贝到VS2022验证下,可以看到豆包也可以正确的输出结果,豆包的编程能力也还是可以的👍。
    在这里插入图片描述

结论

  • kimi、文心一言、chatGPT、豆包可以正确编程;讯飞星火、通义千问、智谱清言虽然提供了更多的实现方法,但不是完整正确,而且错误的点都有点类似,严重怀疑这三家的用的都是同一个开源大模型进行训练的😂。
  • 所以说,AI工具只能作为参考,程序员还需要更深的打磨自己的技术。

http://www.kler.cn/a/299312.html

相关文章:

  • Ubuntu 安装PostgreSQL
  • 【PPT学习笔记】使用PPT制作动画/手书/视频等作品的适配性和可能性?
  • [苍穹外卖]-08微信支付详解
  • python转换并提取pdf文件中的图片
  • 智能巡检机器人局部放电检测的应用
  • 828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群
  • 苹果系统(MacOS)中的Finder如何方便展现根目录
  • Windows与linux中docker的安装与使用
  • 计算机毕业设计选题推荐-健康健身追踪系统-运动健身系统-Java/Python项目实战
  • [Go]通用的 MapReduce 工具函数
  • 《深度学习》OpenCV 高阶 图像金字塔 用法解析及案例实现
  • 对接开源大模型应用开发平台最佳实践
  • 基于深度学习的基因组数据分析
  • 带你深入了解C语言指针(一)
  • Docker零基础入门
  • DSMM认证:解锁数据安全新高度,筑牢企业数据防线
  • [NOIP1999 普及组] Cantor 表
  • [240911] 11 款最佳 Linux 控制台文件管理器 | OpenAI 或将推出每月2000美元的 LLM 订阅服务
  • Web安全之SQL注入:如何预防及解决
  • golang学习笔记05——golang协程池,怎么实现协程池?