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

devtools/2024/9/18 7:35:46/ 标签: ai编程, 大模型, 深度学习, 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); // 每一行的开始和结束都是1for (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// 设置每一行的首位和末尾都为1for (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}; // 初始化二维数组为0for (int i = 0; i < rows; i++) {yanghui[i][0] = 1; // 每一行的开始都是1yanghui[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// 设置每一行的首位和末尾都为1for (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.ppmy.cn/devtools/110317.html

相关文章

Django 模型索引的创建

在 Django 中&#xff0c;索引是优化数据库查询性能的重要工具。Django 提供了多种方式来为模型字段创建索引&#xff0c;比如通过字段选项或直接在模型的 Meta 类中定义。下面详细介绍如何在 Django 中为模型创建索引。 1、问题背景 在 Django 中&#xff0c;当我们需要对模型…

威胁建模网络与云威胁

威胁建模网络与云威胁 1.网络威胁网站威胁网络浏览器和插件威胁 2.云租户威胁内部威胁合租威胁合规威胁 3.云供应者的威胁来自租户的威胁租户行为导致的威胁 4.移动威胁移动设备的独特威胁设备丢失的解决方法 1.网络威胁 网站威胁 网站威胁主要针对通过网站访问的应用程序和数…

数字化转型的战略规划应该怎么做?(附IBM-IT战略规划方法论PPT下载)

IBM-IT战略规划方法论PPT-下载链接见文末~ 数字化转型的战略规划是一个系统而复杂的过程&#xff0c;需要从多个维度进行考虑和规划。以下是一些关键步骤和建议&#xff0c;以帮助企业制定有效的数字化转型战略规划&#xff1a; 1. 明确数字化转型愿景和目标 设定愿景&#…

面试官:聊聊MySQL的binlog

前言 MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。 其中&#xff0c;比较重要的还要属二进制日志 binlog&#xff08;归档日志&#xff09;和事务日志 redo log&#xff08;重做日志&#xff09;和 undo log&#xff08;回滚日志&#…

第三天旅游线路预览——从贾登峪到禾木风景区入口

第三天&#xff1a;从贾登峪到禾木风景区&#xff0c;晚上住宿贾登峪&#xff1b; 从贾登峪到禾木风景区入口&#xff1a; 1&#xff09;早上9&#xff1a;00起床&#xff0c;吃完早饭&#xff0c;9&#xff1a;30出发&#xff1b; 2&#xff09;从贾登峪到禾木景区售票厅&am…

【软件全文档】项目概要设计说明书(2024实际项目Word原件)

一、 引言 &#xff08;一&#xff09; 编写目的 &#xff08;二&#xff09; 范围 &#xff08;三&#xff09; 文档约定 &#xff08;四&#xff09; 术语 二、 项目概要 &#xff08;一&#xff09; 建设背景 &#xff08;二&#xff09; 建设目标 &#xff08;三&#xff0…

NLTK:一个强大的自然语言处理处理Python库

我是东哥&#xff0c;一名热爱技术的自媒体创作者。今天&#xff0c;我将为大家介绍一个非常有趣且强大的Python库——NLTK。无论你是刚刚接触Python的小白&#xff0c;还是对自然语言处理&#xff08;NLP&#xff09;有些许了解的朋友&#xff0c;NLTK都是一个值得学习的工具。…

《Ubuntu 下载和安装的详细步骤》

以下是 Ubuntu 下载和安装的详细步骤&#xff1a; 下载&#xff1a; 1. 打开 Ubuntu 的官方网站&#xff08;https://ubuntu.com/ &#xff09;。 2. 在页面中找到“Download”&#xff08;下载&#xff09;选项&#xff0c;点击进入下载页面。 3. 在下载页面中&#xff0c…

[Go]通用的 MapReduce 工具函数

前言 最近在测试学习 aws s3 sdk 中的 Multi Part Upload 功能&#xff0c;其基本步骤就是 CreateMultipartUpload 后&#xff0c; 串行或并行地 UploadPart &#xff0c;最后 CompleteMultipartUpload 或 AbortMultipartUpload 收尾。为了最高效率地完成整个传输&#xff0c;…

大模型实战一、Ollama+RagFlow 部署本地知识库

大模型实战一、OllamaRagFlow 部署本地知识库 参考你提供的文章&#xff0c;这里是基于 Windows 系统通过 Docker 安装部署 RagFlow 和 Ollama 的本地化大模型知识库的详细教程。本文将指导你如何在 Windows 上使用 Docker 来设置 RagFlow 和 Ollama 环境&#xff0c;并安装通…

【web网页制作】html+css旅游家乡河南主题网页制作(5页面)【附源码】

一、&#x1f468;‍&#x1f393;网站题目 旅游&#xff0c;当地特色&#xff0c;历史文化&#xff0c;特色小吃等网站的设计与制作。 二、✍️网站描述 &#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计&#x1f469;‍&#x1f393;…

数据结构应用实例(二)——K均值聚类

一、问题描述 对Iris数据进行分类&#xff0c;数据从文件读入。Iris包含150个四维的数据&#xff0c;这些数据可以看做是四维空间中的点。根据这些点在空间中的位置分布&#xff0c;将这150个特征点分成三类&#xff0c;分类的依据是欧氏距离&#xff0c;同类点之间的距离比较小…

PPT复制图表时颜色发生变化怎么办?

有时可能想复制其他PPT的图表到另一个PPT里&#xff0c;复制过来发现颜色发生了变化&#xff0c;这与我们PPT中的主题色颜色不同有关&#xff0c;所以就导致了图表的变色。 以上两张图片就是发生了变色的情况&#xff0c;一个是原来的颜色&#xff0c;一个是变化后的颜色。 解…

Linux中的Vim文本编辑器

Linux中的Vim是一个非常强大的文本编辑器&#xff0c;它提供了丰富的命令来支持各种文本编辑操作。以下是一个Vim常用命令的详细总结&#xff0c;涵盖了基本操作、编辑命令、移动光标、查找替换、保存退出等多个方面。 一、基本操作 启动Vim vim&#xff1a;直接启动Vim编辑器…

ElfBoard开源项目|“智慧教室”开源项目技术文档

“智慧教室”项目的目标是实现实时采集环境中的温度、湿度及光照信息&#xff0c;并将这些数据可视化地呈现在Qt图形界面上。用户既可以选择手动控制风扇与窗帘的开关&#xff0c;也可以设置系统根据所采集的环境参数自动调节&#xff0c;以达到舒适的室内环境。接下来&#xf…

【网络安全】漏洞挖掘:文件上传实现Webshell

未经许可,不得转载。 文章目录 正文正文 提交文件功能点,显示只能上传png、jpg、pdf文件 上传一个正常的图片,请求响应如下: 可以看到,该文件被上传到redacted.com,这为后面实现Webshell提供了前提。 接着,我上传webshell.php文件,文件内容为payload,拦截请求包,将…

Java重修笔记 第五十三天 坦克大战(一)绘图入门

绘制简单的图形 1. 创建画板 定义一个画板类&#xff0c;通过继承 JPanel 类来创建画板 2. 创建画笔 在画板类中调用 paint 方法&#xff0c;并传入一个 Graphics g 对象&#xff0c;通过对 g 对象的操作来实现画画的过程 3. 开始作画 调用 Graphics g 对象的方法在 paint …

【代码随想录训练营第42期 Day55打卡 - 图论Part5 - 并查集的应用

目录 一、并查集 适用范围 三大基本操作 二、经典题目 题目&#xff1a;卡码网 107. 寻找存在的路径 题目链接 题解&#xff1a;并查集 三、小结 一、并查集 适用范围 动态连通性问题&#xff1a;并查集可以判断两个节点是否在同一个连通分量中&#xff0c;这在处理网络…

美团GTIS防重系统 幂等操作 防重提交

一、介绍 美团GTIS防重系统 使用 请求参数与用户Token或URL 生成全局业务ID 有效防止 同一个用户 在 限制时间 内对 同一个业务 提交 相同的数据 流程图: 二、注解方式(基于AOP切面实现) 2.1 切面代码 根据token 和 请求参数生成唯一key 来验证重复请求异常 或者 处理失败…

C语言小游戏--贪吃蛇实现

C语言小游戏--贪吃蛇实现 1.游戏实现背景2.Win32 API介绍2.1什么是Win32 API2.2控制台程序(Console)2.3控制台屏幕的坐标COORD2.4GetStdHandle2.4.1函数语法2.4.2函数的使用 2.5GetConsoleCursorInfo2.5.1函数语法2.5.2函数的使用 2.6CONSOLE_CURSOR_INFO2.6.1结构体结构2.6.2结…