起因是洛谷上B2020这道题:

我把我的初步想法给kimi检查一下:

#include <stdio.h>

int main()
{
    int person[5];
    int eat=0;
    scanf("%d %d %d %d %d",&person[0],&person[1],&person[2],&person[3],&person[4]);
    for(int i=0;i<5;i++)
    {
        eat+=person[i]%3;
        person[i]/=3;
        if(i==0)
        {
            person[4]+=person[0];
            person[1]+=person[0];
        }
        else if(i==4)
        {
            person[3]+=person[4];
            person[0]+=person[4];
        }
        else
        {
            person[i-1]+=person[i];
            person[i+1]+=person[i];
        }
    }
    printf("%d %d %d %d %d\n",person[0],person[1],person[2],person[3],person[4]);
    printf("%d",eat);
    return 0;
}

kimi认为我的代码有问题,应该添加新数组才是正确的。

但是我在洛谷OJ上已经通过了。

我开始对kimi产生了怀疑,而且我觉得添加新数组反而是添油加醋。

还污蔑我的输出,我的输出明明就是期望输出。

还认为我的输出是刚好对撞...

又说是这道题的数据太弱了,开始甩锅给平台了。

我让他给我一步步验算一遍:

让他验算发现结果是正确的。

但是他还是不承认自己错了,还说这只是“数据恰好不暴露bug”的巧合。

说他换一组数据就会出错。

那我就让他换一组数据!

又得出了他的狗屁结论了。

我的输出应该是:

0 0 0 0 0

5

他给的正确答案是错的,因为1除3余1,那么多出来的1个苹果应该被吃掉,最后一个苹果都不剩,全部被吃掉了。

又说官方样例是巧合,我的代码会WA

还在强调他那多此一举的临时数组。

证实了我的是对的。

但还死皮赖脸不承认自己的错误,还说是因为这组数据恰好没有暴露bug,逻辑错误,会WA...

最后我懒得跟他废话,kimi也是承认了自己的错误,故事到这里就结束了。

后来我还尝试了一下ChatGPT,他给的代码:

#include <stdio.h>

int main() {
    int candies[5];  // 存储每个小朋友的糖果数量
    
    // 输入每个小朋友最初的糖果数量
    for (int i = 0; i < 5; i++) {
        scanf("%d", &candies[i]);
    }

    // 进行糖果分配
    for (int i = 0; i < 5; i++) {
        // 计算每个小朋友可以分给其他小朋友的糖果数量
        int distribute = candies[i] / 3;
        int remaining = candies[i] % 3;  // 自己剩下的糖果
        
        // 将糖果分配给其他小朋友
        for (int j = 0; j < 5; j++) {
            if (j != i) {
                candies[j] += distribute;
            }
        }

        // 更新当前小朋友手里的糖果数量
        candies[i] = remaining;
    }

    // 输出每个小朋友最终手里的糖果数量
    for (int i = 0; i < 5; i++) {
        printf("%d ", candies[i]);
    }
    printf("\n");

    return 0;
}

这个代码仔细一看也是漏洞百出。

ChatGPT认为糖果是分给每一个小朋友的。

我提醒他:“糖果只分给他旁边的两个人哦”

他的修改:

#include <stdio.h>

int main() {
    int candies[5];  // 存储每个小朋友的糖果数量

    // 输入每个小朋友最初的糖果数量
    for (int i = 0; i < 5; i++) {
        scanf("%d", &candies[i]);
    }

    // 进行糖果分配
    for (int i = 0; i < 5; i++) {
        // 每个小朋友分配给左右两人
        int distribute = candies[i] / 3;  // 分配给每个邻居的糖果数量
        int remaining = candies[i] % 3;   // 当前小朋友剩下的糖果数量

        // 更新左右邻居的糖果数量
        if (i > 0) candies[i - 1] += distribute;  // 左边的邻居
        if (i < 4) candies[i + 1] += distribute;  // 右边的邻居

        // 更新当前小朋友手里的糖果数量
        candies[i] = remaining;
    }

    // 输出每个小朋友最终手里的糖果数量
    for (int i = 0; i < 5; i++) {
        printf("%d ", candies[i]);
    }
    printf("\n");

    return 0;
}

这个代码也是有问题的。

题目中说的是小朋友围坐在一张圆桌旁,而ChatGPT却认为他们是排成一列的。

我提醒他:“他们是围成圈坐的”

修改后:

#include <stdio.h>

int main() {
    int candies[5];  // 存储每个小朋友的糖果数量

    // 输入每个小朋友最初的糖果数量
    for (int i = 0; i < 5; i++) {
        scanf("%d", &candies[i]);
    }

    // 进行糖果分配
    for (int i = 0; i < 5; i++) {
        // 每个小朋友分配给左右两人
        int distribute = candies[i] / 3;  // 分配给每个邻居的糖果数量
        int remaining = candies[i] % 3;   // 当前小朋友剩下的糖果数量

        // 更新左右邻居的糖果数量
        // 因为他们是围成圈坐的,所以小朋友1的左邻居是小朋友5,右邻居是小朋友2
        int left = (i - 1 + 5) % 5;  // 左邻居的索引
        int right = (i + 1) % 5;     // 右邻居的索引

        candies[left] += distribute;  // 左邻居
        candies[right] += distribute; // 右邻居

        // 更新当前小朋友手里的糖果数量
        candies[i] = remaining;
    }

    // 输出每个小朋友最终手里的糖果数量
    for (int i = 0; i < 5; i++) {
        printf("%d ", candies[i]);
    }
    printf("\n");

    return 0;
}

这个就没有问题了。

另外提一嘴DeepSeek,不用他是因为识图能力太糟糕了。

比较少用ChatGPT是因为需要科学上网太麻烦了。

请问一下CSDN里的大神有没有好用的ai可以帮我度过这个新手期的TQT

Logo

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

更多推荐