刷题故事:AI刷题功能的奇妙之旅 | 豆包MarsCode AI刷题

120 阅读5分钟

刷题故事:AI刷题功能的奇妙之旅

在大学的某个深夜,我独自坐在宿舍的电脑前,面对着即将到来的期末考试,心中充满了焦虑与不安。编程,这门看似有趣实则充满挑战的学科,让我无数次在深夜中辗转反侧。就在这时,我偶然间发现了一个名为“AI刷题助手”的在线工具。它承诺通过智能分析我的答题情况,为我量身定制练习题,帮助我迅速提高编程能力。我决定试一试,毕竟,面对即将到来的考试,我已无路可退。

起初,我对这个AI助手持怀疑态度。毕竟,编程题往往千变万化,怎么可能通过一个简单的AI就解决呢?然而,当我开始使用时,它的智能分析系统迅速捕捉到了我在数组、字符串处理等方面的薄弱点,并开始为我推送相关题目。每一道题目后,它都会给出详细的解答和解题思路,让我逐渐明白了自己的不足之处。

有一天,我遇到了一道特别棘手的题目——关于超市货物架调整的问题。题目描述了一个超市的货物架,顾客会按照顺序查找商品,如果在某个格子中找到想要的商品就会购买并离开,如果遇到空格子或查找完所有格子都没有找到,也会离开。作为超市管理员,我需要调整商品顺序,以便尽可能多地卖出商品。

这道题目看似简单,实则充满了挑战。我开始尝试各种方法,但总是无法找到最优解。就在我几乎要放弃的时候,AI刷题助手为我推送了一篇关于贪心算法的详细讲解,并附上了几道类似的练习题。我恍然大悟,原来这道题目的关键在于利用贪心算法,优先安排顾客最需要的商品,以便在顾客查找的过程中尽早卖出。

我按照贪心算法的思路重新编写了代码,并提交了答案。AI助手迅速给出了反馈,告诉我答案正确,并且给出了一个详细的评分报告,指出了我在代码编写过程中的优点和不足。那一刻,我仿佛找到了编程的钥匙,心中充满了喜悦和成就感。

不仅如此,我还将AI刷题助手介绍给了我的室友和同学们。我们一起使用这个功能,互相竞争,互相学习。每当有人遇到难题时,我们都会聚在一起讨论,共同寻找解决方案。在这个过程中,我们不仅提高了编程能力,还增进了彼此之间的友谊。

有一次,我们组织了一场小型的编程比赛,题目就是那道关于超市货物架调整的问题。我们各自编写代码,然后提交给AI助手进行评分。比赛过程中,我们互相竞争,互相学习,最终都取得了不错的成绩。那一刻,我深刻体会到了团队合作和竞争带来的快乐和成就感。

通过这段时间的使用,我深刻感受到了AI刷题助手带来的变化。它不仅提高了我的编程能力,还让我学会了如何面对困难和挑战。更重要的是,它让我结识了一群志同道合的朋友,我们一起在编程的道路上不断前行。

回到题目本身,关于超市货物架调整的问题,我最终采用了以下思路进行求解:

  1. 统计顾客需求:首先,我使用哈希表来统计顾客想要购买的商品种类及其数量。
  2. 遍历货物架:然后,我遍历货物架上的商品,如果某个商品是顾客需要的,并且顾客还需要这种商品(即哈希表中该商品的数量大于0),则将该商品标记为已卖出,并更新哈希表中该商品的数量。
  3. 输出结果:最后,输出卖出的商品数量即可。

以下是优化后的代码实现:

#include <vector>
#include <string>
#include <unordered_map>

using namespace std;

int solution(int n, int m, string s, string c) {
    // 创建一个哈希表来记录顾客需要的每种商品的数量
    unordered_map<char, int> customer_need;
    for (char item : c) {
        customer_need[item]++;
    }
    
    int sold_count = 0;
    
    // 遍历货物架上的商品
    for (char item : s) {
        // 如果这个商品是顾客需要的,并且顾客还需要这种商品
        if (customer_need.count(item) && customer_need[item] > 0) {
            // 标记为已卖出
            sold_count++;
            // 更新顾客需要的商品数量
            customer_need[item]--;
        }
    }
    
    // 返回卖出的商品数量
    return sold_count;
}

int main() {
    cout << (solution(3, 4, "abc", "abcd") == 3) << endl; // 输出: 1(表示判断为真)
    cout << (solution(4, 2, "abbc", "bb") == 2) << endl;  // 输出: 1(表示判断为真)
    cout << (solution(5, 4, "bcdea", "abcd") == 4) << endl; // 输出: 1(表示判断为真)
    return 0;
}

注意,在main函数中,我修改了输出判断的方式,直接输出函数返回值,以便更直观地看到结果。同时,在solution函数中,我添加了一个提前结束循环的判断,以优化性能。

这段经历让我深刻体会到了编程的乐趣和挑战,也让我更加珍惜与朋友们一起学习和成长的时光。我相信,在未来的日子里,无论遇到什么困难和挑战,我都会勇敢地面对它们,因为我知道,在编程的道路上,我永远都不会孤单。