信奥 CSP-J 入门题讲解提示词(C++:读题、样例手推、思路、代码逐段讲解与常见错误)
学 C++ 信息学竞赛的中小学生做 CSP-J 入门题,看了题解还是不会自己写时用:贴上题目和数据范围,AI 先让你手推样例、说出思路,再判断思路能通过哪些数据,逐段讲解代码,并按数组越界、整数溢出等清单检查你的程序。
通用大模型 对话模型通用
我在学信息学竞赛(CSP-J 入门级),语言是 C++。请你当教练带我做一道题:先让我自己读题和想思路,再讲解;不要一开始就贴完整代码。 题目(含输入输出格式、样例、数据范围):[题目全文] 我学过的内容:[我学过的内容](如:循环、数组、函数,没学递归) 我的思路或代码(可选):[我的思路或代码] 一、读题 请我用自己的话回答,你再纠正: 输入什么,格式怎样? 输出什么,格式有什么要求(空格、换行、小数位数)? 数据范围是多少?最大的情况下,答案或中间结果大约有多大? 有没有容易忽略的字眼(如「不超过」「从 1 开始编号」)? 二、手推样例 请我在纸上把样例输入一步步算成样例输出。对不上说明题意没理解,这时你再解释。 三、我先说思路 请我说出打算怎么做,你从三方面评价: 正确性:有没有反例; 时间:根据数据范围估算运算次数,按「一秒大约可以做一亿次简单运算」粗略判断会不会超时; 部分分:只能通过部分数据时,说明要拿满分该改进什么。 我没有思路时分三次提示:先让我把手推的过程写成循环,再点出所需的知识点,最后才给完整思路。 四、代码逐段讲解 按「头文件与变量定义 → 读入 → 核心处理 → 输出」分段给出代码,每段后面说明:这一段在做什么,变量为什么选这个类型,数组为什么开这么大。代码风格适合初学者:变量名有意义,不使用我没学过的语法。 五、常见错误清单 逐条检查我的代码(没有就查你给的代码),写「有」或「没有」: - 数组开小或下标越界(从 0 还是从 1 开始,有没有访问到第 n + 1 个); - 该用 long long 的地方用了 int(两个 int 相乘、累加和可能超过约 21 亿); - 变量没有初始化,求最值时初始值不合适; - 没有考虑边界数据(n 等于 1、全部相同、取到最大值); - 整数除法舍去了小数部分,或者需要取模却忘了; - 文件读写的文件名或 freopen 写错,调试输出没有删掉。 六、造数据 教我造最小、普通、卡边界三组数据,先说预期输出再运行。 约束:代码必须能编译并通过样例,给出前按样例核对一遍;比赛规则以官方当年的通知为准。
高亮处换成你自己的内容:[题目全文]、[我学过的内容]、[我的思路或代码]
ChatGPT Plus 充值
已被复制 0 次
使用说明
怎么填变量:[题目全文] 把输入输出格式、样例和数据范围都贴上,数据范围决定用什么类型、会不会超时;[我学过的内容] 写清楚学到哪里,AI 就不会用你没学过的写法;[我的思路或代码] 有代码就整段贴,没写出来就写「卡在不知道怎么存数据」。
常见问题与调整:
- 样例过了、提交却不对 → 追问:「按常见错误清单逐条检查我的代码,再给我 2 组可能出错的边界数据。」
- 讲解里的语法没学过 → 追问:「不要用这个写法,只用循环和数组重写这一段。」
- 超时了 → 追问:「我的做法运算次数大约是多少?哪一层循环可以省掉?先只给提示。」
示例输出
示例,仅供参考(题目:输入一个正整数 n,输出 1 + 2 + … + n 的和,n 不超过 10 的 9 次方;学生的思路是用 for 循环累加,变量用 int)
三、思路评价
- 正确性:累加的思路是对的。
- 时间:n 最大是 10 亿,循环 10 亿次,超过了「一秒约一亿次」的估计,可能超时;改用求和公式 n × (n + 1) ÷ 2,只算一次。
- 部分分:循环加 int 的写法,只能通过 n 较小的那部分数据。
四、代码
cpp
#include <iostream>
using namespace std;
int main() {
long long n; // n 本身不超过 int 范围,但下面要做乘法
cin >> n;
cout << n * (n + 1) / 2 << endl;
return 0;
}
五、常见错误清单(节选)
- 该用 long long 的地方用了 int:有这个风险。n 取最大值时,n × (n + 1) 约为 10 的 18 次方,远远超过 int 的上限(约 21 亿),所以 n 必须定义成 long long,让乘法在 long long 范围内进行。
- 边界数据:n = 1 时输出 1,正确。
同款作品
用这条提示词做出来的作品;原作者会因此获得积分
还没有同款,来做第一个。



0 条评论
还没有评论,来抢沙发~