首先,我要申明以下内容:

但是,我写代码一般比较工整(不是自夸),不爱写注释,但是变量名有时候很长(比如使用拼音,或者英语)

这就引发了一个问题,我在参加比赛的时候会被判为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)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐