如何让自己的代码看起来不像是AI写的?
如何让自己的代码不被认为是AI写的
·
首先,我要申明以下内容:
但是,我写代码一般比较工整(不是自夸),不爱写注释,但是变量名有时候很长(比如使用拼音,或者英语)
这就引发了一个问题,我在参加比赛的时候会被判为AI,这就很无语
1.从人的角度出发,如何判断一段代码是AI?
下面的代码是刚刚帖子中的一份
"****题目:BCP00005「UVa 10382」喷水装置****
~~~~
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
struct Interval {
double start;
double end;
Interval(double s, double e) : start(s), end(e) {}
bool operator<(const Interval& other) const {
return start < other.start;
}
};
int main() {
int T;
cin >> T;
while (T--) {
int n, L, W;
cin >> n >> L >> W;
vector<Interval> intervals;
for (int i = 0; i < n; ++i) {
int position, radius;
cin >> position >> radius;
if (radius <= W / 2.0) continue;
double length = sqrt(radius * radius - (W / 2.0) * (W / 2.0));
intervals.emplace_back(position - length, position + length);
}
sort(intervals.begin(), intervals.end());
double current_end = 0.0;
int result = 0;
size_t i = 0;
while (current_end < L) {
double max_end = current_end;
bool found = false;
while (i < intervals.size() && intervals[i].start <= current_end) {
if (intervals[i].end > max_end) {
max_end = intervals[i].end;
found = true;
}
++i;
}
if (!found) {
result = -1;
break;
}
current_end = max_end;
++result;
}
cout << result << endl;
}
return 0;
}"
我们来分析一下这份代码(第一行空行算第一行)
a.多个include
4-7行中,多个include,一般情况下,为了保证容错,我们通常使用
来代替多个模块导入,因为这样打的字少,当然也有选手喜欢多行导入,省时。
b.定义变量,数组,结构体,向量等的名称
第10行,结构体,但是名字太长了,"Interval"意思是 间隔 ,这样写虽然会提高代码可读性,但是没有人不喜欢用一个T或者I来代替Interval。
11,12,14 定义double类变量和bool类变量,问题仍然是变量名过长,虽然我不反对start end,但是对于区间的表示,更多代码中使用的是l r.另外,bool类型变量"operator",意思是运算符,但是作为一个判断T/F的变量,更多代码中最常用的是 ok,is.
c.注释
变量的问题我就不说了,以此类推,所有一长串的名称,都看不出来是人写的。注释,很多AI写代码都会写注释,除非你要求“不写注释”/“删除所有注释”,但是AI的默认代码基本上会告诉你哪一个是什么意思,如果你爱写注释,就不要用过于官方的语言,大白话更容易过审核。
d.代码格式
最后,代码格式问题。观察代码,全篇十分工整,我们来摘取一些细节
int n, L, W;
cin >> n >> L >> W; //逗号 >> 后的空格
//这种空格如果是人写的,是需要花费心思的,大多数人没有那个心思
for (int i = 1;i <= n;i++) {
//for语句也有空格,但是我一般是这么写的,因为当初以为没有空格会编译错误,现在也懒的改
//重点是这个括号,花括号和小括号之间也有空格
}
for(int i = 1;i <= n;i++){ //有些贴着写
}
for(int i = 1;i <= n;i++)
{
//有些换行写 (我)
}
for(int i = 1;i <= n;i++) cin>>a[i]; //有些没括号
//还有几种不列了,但是大部分AI是第一种写法
//最后一个,多的空行(这个一般无所谓,但是也是AI的特点)
//示例啊,比如说输出HW,AI的代码会分段(Deepseek/Kimi)
#include <iostream>
using namespace std;
//这里
int main
{
cout << "Hello World!" << endl;
//这里
return 0;
}
//人通常会有换行的习惯,但是AI的换行是有规律的,比如空间命名后会留位置定义变量,指令结束了空一行再return 0;
2.总结
1.不要用AI做题
2.不要直接复制AI代码
3.如果代码不展示,写乱点没人说你(bushi)
更多推荐
所有评论(0)