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

2024-09-07 07:12

本文主要是介绍各类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工具只能作为参考,程序员还需要更深的打磨自己的技术。

这篇关于各类AI工具编程能力测试对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144414

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键