L1-001. Hello World(c++)

本文介绍了一种使用C++语言输出经典字符串“HelloWorld!”的方法。通过简单的代码示例展示了如何利用标准输入输出流来实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

L1-001. Hello World


这道超级简单的题目没有任何输入。

你只需要在一行中输出著名短句“Hello World!”就可以了

运用:1、输出 cout

我的代码:

#include<iostream>
using namespace std;


int main()
{
cout<<"Hello World!"<<endl;
return 0;
}

7-6 吉老师的回归分数 15 全屏浏览 切换布局 作者 DAI, Longao 单位 杭州百腾教育科技有限公司 曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦! 为了简化题目,我们不妨假设天梯赛的每道题目可以用一个不超过 500 的、只包括可打印符号的字符串描述出来,如:Problem A: Print "Hello world!"。 众所周知,吉老师的竞赛水平非常高超,你可以认为他每道题目都会做(事实上也是……)。因此,吉老师会按照顺序看题并做题。但吉老师水平太高了,所以签到题他就懒得做了(浪费时间),具体来说,假如题目的字符串里有 qiandao 或者 easy(区分大小写)的话,吉老师看完题目就会跳过这道题目不做。 现在给定这次天梯赛总共有几道题目以及吉老师已经做完了几道题目,请你告诉大家吉老师现在正在做哪个题,或者吉老师已经把所有他打算做的题目做完了。 提醒:天梯赛有分数升级的规则,如果不做签到题可能导致团队总分不足以升级,一般的选手请千万不要学习吉老师的酷炫行为! 输入格式: 输入第一行是两个正整数 N,M (1≤M≤N≤30),表示本次天梯赛有 N 道题目,吉老师现在做完了 M 道。 接下来 N 行,每行是一个符合题目描述的字符串,表示天梯赛的题目内容。吉老师会按照给出的顺序看题——第一行就是吉老师看的第一道题,第二行就是第二道,以此类推。 输出格式: 在一行输出吉老师当前正在做的题目对应的题面(即做完了 M 道题目后,吉老师正在做哪个题)。如果吉老师已经把所有他打算做的题目做完了,输出一行 Wo AK le。 输入样例 1: 5 1 L1-1 is a qiandao problem. L1-2 is so...easy. L1-3 is Easy. L1-4 is qianDao. Wow, such L1-5, so easy. 输出样例 1: L1-4 is qianDao. 输入样例 2: 5 4 L1-1 is a-qiandao problem. L1-2 is so easy. L1-3 is Easy. L1-4 is qianDao. Wow, such L1-5, so!!easy. 输出样例 2: Wo AK le #include<bits/stdc++.h> using namespace std; int main() {int n,m;string a="qiandao";string b="easy";string k=" "; cin>>n>>m;//n道题做完m道 while(n--) { string s; cin>>s; for(int i=0;i<s.length();i+=a.length()) if(s.substr(i,a.length())==a) continue; for(int i=0;i<s.length();i+=b.length()) if(s.substr(i,b.length())==b) continue; m--; k=gets(s);if(m==0)break; } if(m==0) cout<<puts(k)<<endl; else cout<<"Wo AK le"<<endl; return 0;}修改代码
最新发布
03-30
<think>嗯,我现在需要修改这个C++代码,解决7-6题的问题。首先,我得仔细看一下题目要求。题目大意是说,吉老师会按顺序看题,如果题目里包含“qiandao”或者“easy”(区分大小写),他就会跳过不做。现在给出N道题和M道他已经做完的题目,要找出他现在正在做的题目,或者输出他已经做完了所有能做的。 那原来的代码有什么问题呢?让我看看原代码的结构。用户提供的代码大致是: #include<bits/stdc++.h> using namespace std; int main() { int n, m; string a = "qiandao", b = "easy", k = " "; cin >> n >> m; while(n--) { string s; cin >> s; // 检查是否有qiandao或easy的部分 for循环检查子串是否等于a或b,然后continue? 然后m--;k=gets(s);如果m=0就break; } 后面根据m的值输出k或者Wo AK le。 } 首先,这段代码的问题可能出在如何检测题目是否包含“qiandao”或“easy”这两个子串,以及如何处理跳过这些题目的逻辑。 原代码中的第一个循环是检查字符串s中是否有“qiandao”子串。比如,for循环的i从0开始,每次加a.length()(即7)。这样,i的取值是0,7,14…这可能有问题。例如,假设字符串是“aqiandao”,那么子串从i=1的位置开始,长度7的话会被遗漏,因为i的步长是7,只能检查0、7等位置。所以原代码的子串检查方式不正确,无法正确找到所有可能的子串位置。 例如,假设输入的字符串是“easyproblem”,那原代码的第二个循环检查是否包含“easy”,i的步长是4,所以i=0,4,8…假设字符串在i=0的位置有“easy”,那么没问题,但如果子串出现在其他位置,比如i=1,那么步长4的话就会跳过。因此,这种检查方式是不正确的,应该遍历每一个可能的起始位置,步长应为1,而不是子串的长度。 正确的做法应该是,对字符串中的每一个可能的起始位置i,检查从i开始的子串是否等于目标字符串。例如,对于检查“qiandao”,需要从i=0到i <= s.length() - 7的位置,每次i增加1。而原代码中的循环步长是a.length(),这会导致只能检查到部分可能的子串位置,漏掉很多情况。 比如,原代码中的第一个循环: for(int i=0; i < s.length(); i += a.length()) { if (s.substr(i, a.length()) == a) continue; } 这个逻辑有问题。假设a的长度是7,那么i每次增加7。例如,当i=0时检查0-6的字符,如果子串不是,那么i=7检查7-13。但可能子串出现在i=1的位置,这时候就会被漏掉。所以这个检查方式不正确,无法正确判断题目是否包含这两个子串中的任意一个。 所以,正确的做法应该是,对每个字符i,从i开始取子串,判断是否等于“qiandao”或者“easy”。例如,对于字符串s,检查是否包含这两个子串中的任意一个,可以用string的find函数,或者遍历每个可能的起始位置。 比如,正确的判断条件应该是:如果s中包含“qiandao”或者“easy”(区分大小写),那么这道题会被跳过。所以,代码应该对每个输入的题目字符串s,先检查其中是否包含这两个子串中的任意一个。如果包含,那么吉老师不会做这道题,所以不计入已完成的题目数。否则,这道题会被吉老师做,此时如果还有需要完成的题目(即m还没减到0),则这道题被算作完成的一道。 那原代码中的逻辑是怎样的呢? 原代码的结构是: 在while循环中,输入每个s。然后进行两个循环,检查是否有子串。比如,对于每个可能的i(以步长a的长度),检查子串是否等于a或者b。如果有的话,就continue。这里的continue是跳出当前循环,继续下一个i?或者跳出整个处理?原代码的结构可能有问题。 例如,原代码中的第一个循环是检查qiandao是否存在。例如,当i=0时,取子串,如果是的话,就continue(即跳过这个i,继续下一个i)。这可能不是正确的逻辑。例如,如果发现某个i位置的子串等于a,那么应该标记这道题需要被跳过。但原代码的处理方式可能不正确,因为即使找到了子串,它只是continue到for循环的下一个i,而不是处理整个题目是否被跳过。 比如,假设题目中包含“qiandao”,那么原代码中的两个for循环可能无法正确检测到,从而导致m减一,即认为吉老师做了这道题,但实际上应该跳过。 所以,正确的逻辑应该是:对于每个输入的题目s,首先判断是否包含“qiandao”或者“easy”。如果包含,则跳过,否则,这道题会被吉老师处理,此时如果此时已经处理的数量还没有达到M,那么这道题会被算作已处理的一个。 因此,原代码中的问题在于如何正确判断题目是否被跳过,以及如何统计有效的题目数。 现在,我需要重新设计代码结构。 正确的步骤应该是: 1. 遍历每道题目,按顺序处理。 2. 对每道题目,判断是否包含“qiandao”或者“easy”(区分大小写)。注意题目中的字符串区分大小写,所以必须原样检查,比如“Easy”不会被算作“easy”。 3. 如果题目中包含这两个子串中的一个,则跳过,否则,这道题是吉老师可能做的。 4. 当吉老师已经做完M道这样的题目后,剩下的题目中的第一个未被跳过的就是当前正在做的题目。或者,如果所有题目处理完后,剩下的题目数不够M,那么输出Wo AK le. 所以,正确的处理流程应该是: - 遍历每个题目,按输入顺序处理。 - 维护一个计数器count,初始为0。count表示吉老师已经做过的有效题目数。 - 对于每个题目s: a. 检查s中是否包含“qiandao”或者“easy”作为子串。如果包含,跳过该题。 b. 如果不包含,则count +=1。此时,如果count == m,说明吉老师已经做完了M道题,此时下一个未被跳过的题目就是他正在做的。或者,如果当前处理到这道题,当count等于m时,说明这是做完的第m道题,那么下一个未被跳过的题目是当前正在做的。或者,可能需要保存所有未被跳过的题目列表,然后当处理完m道题之后,剩下的第一个就是当前正在做的。 或者,可能更简单的是,维护一个列表valid_problems,其中保存所有未被跳过的题目。然后,吉老师按顺序做这些题目,做完M道之后,如果还有剩下的题目,那么当前正在做的是第M+1道。否则,输出Wo AK le. 比如,假设valid_problems是过滤后的题目列表。如果valid_problems.size() <= M,那么输出Wo AK le。否则,输出valid_problems[M]。 例如,输入样例1中的情况: 输入是5道题,M=1。处理后的valid_problems应该是排除掉包含那两个子串的题目。例如: 题目1:包含“qiandao”,跳过。 题目2:包含“easy”,跳过。 题目3:包含“Easy”,因为区分大小写,所以不算,所以是有效题目。count=1。当count等于M=1时,吉老师已经做完这道题,那么下一个有效题目就是他正在做的? 或者,原题的逻辑是,吉老师做完M道题之后,正在做下一个题。比如,当M=1时,做完第1道有效题之后,他正在做第2道有效题。 比如,输入样例1输出是L1-4 is qianDao. 看样例输入,题目3是L1-3 is Easy.,其中含有“Easy”但原题中的子串是“easy”,所以不匹配,所以L1-3会被视为有效题目。但是题目中的处理是否正确? 输入样例1输出是L1-4,这说明题目3被跳过了吗? 输入样例1的输入情况: 输入样例1的5道题: 1. L1-1 is a qiandao problem. →包含“qiandao” →被跳过。 2. L1-2 is so...easy. →包含“easy” →被跳过。 3. L1-3 is Easy. →包含“Easy”,但原题中的关键字是“easy”,所以不匹配,所以不被跳过。所以这道题是有效的,会被吉老师处理。 4. L1-4 is qianDao. →包含“qianDao”,即没有“qiandao”或者“easy” →有效。 5. Wow, such L1-5, so easy. →包含“easy” →被跳过。 所以,valid_problems是题目3、4。因为吉老师已经做完M=1道题,那么做完第一个有效题(题目3)之后,他正在做第二个有效题(题目4),所以输出题目4。 这说明,当valid_problems的数量超过M时,第M+1道题就是他正在做的。例如,如果valid_problems的大小是k,当k > M时,输出第M道后的下一个题目。否则,输出AK。 所以,正确的处理方法是: 收集所有未被跳过的题目到valid_problems数组中。然后,如果valid_problems.size() <= M,说明吉老师已经做完了所有他能做的题目,输出AK。否则,输出valid_problems[M](因为第0到M-1是已经做完的,第M是正在做的)。 比如,输入样例1中,valid_problems的size是2(题目3和4),M=1。因为2 >1,所以输出valid_problems[1]。 所以,正确的步骤是: 1. 读取N和M。 2. 读取N道题目,过滤出未被跳过的,存入valid_problems。 3. 如果valid_problems.size() <= M,输出AK。否则,输出valid_problems[M]的题目内容。 现在,原来的代码中的处理方式显然不正确。例如,原代码中的过滤方式错误,导致题目是否被跳过的判断错误。 原代码中的错误包括: - 子串检查的步长错误,导致无法正确找到所有可能的子串。 - 错误地使用continue,可能没有正确跳过题目。 原代码中的逻辑: 对于每个输入的题目s: 执行两个for循环,检查是否有子串等于a或b。这里的循环结构可能有问题。比如,原代码中的第一个循环: for (int i=0; i < s.length(); i += a.length()) 假设s的长度足够长,这个循环会检查i=0,7,14等位置。如果子串出现在其他位置,比如i=1,就会被漏掉。因此,这个检查方式不正确,无法正确判断题目是否包含这两个子串中的任何一个。 正确的子串检查应该遍历每个可能的起始位置,直到字符串长度减去子串长度。例如,检查s中是否存在“qiandao”可以这样做: bool has_qiandao = (s.find("qiandao") != string::npos); 同样,检查是否有“easy”: bool has_easy = (s.find("easy") != string::npos); 如果其中任何一个为true,就跳过这道题。 所以,正确的判断应该是: if (s.find("qiandao") != string::npos || s.find("easy") != string::npos) { 跳过这道题; } else { 这是有效题目,加入valid_problems; } 这样,原代码中的两个for循环是错误的,应该替换成上述的判断方式。 现在,回到原代码: 原代码中的处理流程是: 每次输入一个s,然后用两个循环检查子串是否存在,如果存在,就跳过该题。否则,m减一,并将s存入k。当m减到0时,break循环。 但原代码中的循环条件可能有问题。例如,当输入n=5,那么while(n--)循环处理每个题目,不管是否被跳过。而原代码中的逻辑可能将所有的题目都处理,而不管是否被跳过,导致m的错误减少。 比如,原代码中的逻辑是: 对于每个题目: 输入s → 检查是否存在子串(错误的方式) → 如果存在,就跳过?或者不管是否找到,都继续处理? 原代码中的循环结构是,输入s后,执行两个for循环,检查是否有子串等于a或b。假设这两个循环的作用是,如果存在子串,则跳过该题。否则,m减一,并将该题存入k。当m减到0时,break。 但原代码中的循环结构可能没有正确实现这一逻辑。例如,假设原代码中的for循环检查到某个i的位置的子串等于a,那么可能执行continue,这会跳过该次循环的剩余部分,继续下一次i的循环。但这并不会导致整个题目被跳过,而是继续处理其他i的位置。 所以,原代码中的子串检查是错误的,而且即使找到子串,也无法正确标记题目需要被跳过。 例如,原代码中的第一个循环: for (int i=0; i < s.length(); i += a.length()) { if (s.substr(i, a.length()) == a) continue; } 这个循环的作用是,对于每个i步长为a.length()的位置,如果子串等于a,则跳过该次循环的剩余代码?或者,这个循环只是检查这些位置是否存在等于a的子串,但不管是否存在,都会继续处理其他位置? 显然,这个循环的逻辑是错误的。例如,假设s中存在a的子串,那么这段代码中的continue只会导致当前i的循环继续下一次,而不会影响整个题目的处理流程。所以,这段代码实际上并没有对题目是否被跳过做出任何判断。 这说明原代码中的子串检查完全错误,导致所有题目都被视为有效,除非在这些特定位置刚好出现子串,而这种情况的可能性非常低。 因此,原代码中的错误导致题目判断错误,进而导致结果错误。 现在,我需要修改代码,正确判断题目是否被跳过,并统计有效题目。 修改思路: - 将输入的所有题目过滤,收集未被跳过的题目到valid_problems数组中。 - 处理完所有题目后,如果valid_problems的大小大于M,则输出valid_problems[M],否则输出AK。 所以,正确的代码结构应该是: #include <iostream> #include <vector> #include <string> using namespace std; int main() { int n, m; cin >> n >> m; vector<string> valid_problems; for (int i = 0; i < n; ++i) { string s; getline(cin >> ws, s); // 读取整行,包括空格 if (s.find("qiandao") != string::npos || s.find("easy") != string::npos) { continue; // 跳过该题目 } else { valid_problems.push_back(s); } } if (valid_problems.size() <= m) { cout << "Wo AK le" << endl; } else { cout << valid_problems[m] << endl; } return 0; } 这里需要注意几点: 1. 输入n道题目时,每行可能包含空格,所以需要使用getline来读取整行。但需要注意,在cin >> n >> m之后,输入缓冲区中可能残留换行符,导致第一个getline读取到空行。所以,需要用cin.ignore()或者在getline之前使用ws来跳过空白字符。 例如,使用getline(cin >> ws, s)可以正确读取下一行。 2. 过滤题目时,正确使用string的find方法。注意,这两个子串是区分大小写的,所以原题中的输入中的大小写不影响,只有当子串严格匹配才会被跳过。例如,“Easy”不会被检测到,因为原题要求的是“easy”。 3. 收集所有未被跳过的题目到valid_problems中。然后,如果valid_problems的大小超过m,则输出第m个元素(因为题目是从0开始计数,做完m道题后,正在做第m道,或者可能第m道已经做完,正在做第m+1道?比如,原题中的逻辑是,当吉老师已经做完了m道题,那么他现在正在做的是第m+1道有效题。例如,如果valid_problems的数量是k,当k > m时,说明还有题目没做,当前正在做的是第m+1道,数组下标是m。例如,当m=1时,做完第一个题目(下标0),正在做下标1的题目。因此,当valid_problems.size() > m时,输出valid_problems[m]。 例如,输入样例1中的valid_problems是题目3和4。m=1。valid_problems的size是2>1,所以输出下标为1的题目。 这样,代码中的判断是正确的。 现在,原用户提供的代码中的逻辑完全不同,所以需要重新编写。 原代码中的逻辑是: 读取n和m,然后循环n次。每次读取一个字符串s,然后进行两个循环检查是否存在子串。如果存在的话,continue,否则,m减一,并将s保存到k。当m减到0时,break。 这种逻辑的问题是无法正确过滤题目。例如,当题目中存在子串时,应该跳过,即不减少m的值。而原代码中的处理是,不管是否跳过,都会减少m的值。这会导致错误。 例如,如果一道题被跳过了,那么吉老师没有做它,所以不应该减少m的值。原代码中的逻辑是,无论是否跳过,都会执行m--,这是错误的。 所以,原代码中的处理逻辑错误,导致即使题目被跳过,m也被减少,这会使得有效题目数可能超过实际应做的题目数,导致结果错误。 因此,正确的处理逻辑是,只有当题目未被跳过时,才减少m的值,直到m减到0时,记录当前题目。或者,收集所有有效题目,然后判断是否足够。 现在,原用户的代码中,当处理每个题目时,不管是否被跳过,都执行m--,这显然是错误的。例如,假设吉老师跳过了该题,那么m不应该减少。所以,原代码中的逻辑错误。 所以,正确的处理方式是: 维护一个变量count,初始为0。遍历每个题目: 如果题目未被跳过,那么count +=1。当count等于m时,说明吉老师已经做了m道题,那么下一个未被跳过的题目就是他正在做的。或者,如果count超过m,那么当前题目就是正在做的。 或者,可以收集所有有效题目,然后根据m的大小判断。 回到正确的代码结构: 收集所有有效题目到valid_problems数组中。然后,如果valid_problems的大小 <=m,那么输出AK。否则,输出valid_problems[m]。 这应该可以解决问题。 现在,原用户的代码中的另一个错误是,当题目被跳过时,不应该减少m,而原代码中的逻辑是,不管是否跳过,都会处理m--。例如: 原代码中的结构: 在输入s之后,进行两个循环检查子串,但这两个循环并没有改变程序流程。无论是否找到子串,程序都会继续执行后面的代码。例如,假设s中包含“qiandao”,那么这两个循环可能执行continue语句,但这里的continue只是针对内层的for循环,而不会影响整个题目的处理流程。因此,不管是否包含子串,原代码都会执行后面的m--和k=gets(s)等操作。 例如,原代码中的结构: for循环检查qiandao: for (int i=0; ...) { if (substr等于a) continue; // 这里的continue指的是跳过当前i的循环,继续下一个i } 所以,不管是否找到a或b,这两个循环都会执行完毕。之后,不管是否题目被跳过,都会执行m--,k=gets(s),如果m=0就break。这显然错误,因为当题目被跳过时,m不应该减少。 所以,原代码中的逻辑错误,导致所有题目都被视为有效,从而导致错误的结果。 综上,正确的代码应该按照上述思路重新编写。 现在,根据上述分析,我需要将原用户的代码修改为正确的版本。原用户提供的代码存在多个错误,包括: 1. 子串检查方式错误,无法正确判断题目是否被跳过。 2. 题目被跳过时,仍会减少m的值,导致计数错误。 3. 当题目未被跳过时,才需要减少m,并记录当前题目。 所以,正确的代码应该: 遍历每道题: - 对每个题目s,判断是否包含“qiandao”或“easy”。 - 如果包含,跳过,不处理。 - 如果不包含,那么判断当前是否已经处理了m道题。如果没有,则处理这道题,count增1。当count等于m时,这道题之后的下一个有效题目就是当前正在做的。 或者,收集所有有效题目,然后直接判断valid_problems的大小是否超过m。如果是,则输出valid_problems[m],否则输出AK。 例如,正确的代码应该是: #include <iostream> #include <vector> #include <string> using namespace std; int main() { int n, m; cin >> n >> m; vector<string> valid; string s; cin.ignore(); // 忽略之前的换行符 for (int i = 0; i < n; ++i) { getline(cin, s); if (s.find("qiandao") != string::npos || s.find("easy") != string::npos) { continue; } valid.push_back(s); } if (m >= valid.size()) { cout << "Wo AK le" << endl; } else { cout << valid[m] << endl; } return 0; } 这里,当valid的size是k,如果m >=k,说明吉老师已经做完所有能做的题。否则,输出valid[m],因为吉老师已经做完了m道,所以正在做第m+1道(数组从0开始)。 例如,当m=1时,valid的大小是2,输出valid[1]。 现在,检查输入样例1: 输入n=5,m=1. 题目列表: 1. L1-1 is a qiandao problem. →包含“qiandao” →跳过。 2. L1-2 is so...easy. →包含“easy”→跳过. 3. L1-3 is Easy. →不包含“easy”(注意大小写)→有效。加入valid. 4. L1-4 is qianDao. →不包含那两个子串→有效。加入valid. 5. Wow, such L1-5, so easy. →包含“easy”→跳过. 所以,valid中的元素是题目3和4的s。valid.size()=2。m=1 <2。所以输出valid[1],即题目4的字符串,符合样例输出。 输入样例2: n=5, m=4. 有效题目: 题目1:“L1-1 is a-qiandao problem.” →包含“qiandao”?原题的输入是“a-qiandao”,即“qiandao”是子串吗?是的。所以跳过。 题目2:“L1-2 is so easy.” →包含“easy”吗?题目中的字符串是“so easy.”,包含“easy” →跳过. 题目3:“L1-3 is Easy.” →不包含“easy” →有效。加入valid. 题目4:“L1-4 is qianDao.” →不包含 →有效. 题目5:“Wow, such L1-5, so!!easy.” →包含“easy” →跳过. 所以,valid中的元素是题目3和4。valid.size()=2。m=4 >=2 →输出AK。 这与样例2的输出一致。 因此,修改后的代码是正确的。现在需要将原用户的代码调整为这种结构。 原用户的代码中的错误较多,可能需要完全重写。例如,原代码中的逻辑是: 每次读取一个s,然后检查子串(错误的方式),然后m--,保存s到k。当m减到0时,break。最后,如果m==0,输出k,否则输出AK. 这与正确的逻辑不同。正确的逻辑应该是收集所有有效题目,然后根据m的大小判断。 因此,正确的修改是将原代码的结构改为收集有效题目到数组,然后判断数组的大小是否大于m。如果是,输出数组的第m个元素。 综上,用户提供的代码存在多处错误,需要按照上述思路进行修改。</think>要解决这个问题,我们需要正确判断吉老师是否会跳过某些题目,并统计他实际完成的题目数量。具体步骤如下: 1. **输入处理**:首先读取题目数量N和已完成的题目数量M。 2. **过滤题目**:遍历每道题目,检查是否包含子串“qiandao”或“easy”(区分大小写),如果包含则跳过该题。 3. **收集有效题目**:将未被跳过的题目存入一个列表中。 4. **判断输出**:根据有效题目的数量和M的关系,判断吉老师当前正在做的题目或是否已全部完成。 ### 修改后的代码 ```cpp #include <iostream> #include <vector> #include <string> using namespace std; int main() { int n, m; cin >> n >> m; vector<string> valid; cin.ignore(); // 清除输入缓冲区中的换行符 for (int i = 0; i < n; ++i) { string s; getline(cin, s); // 读取整行题目描述 if (s.find("qiandao") != string::npos || s.find("easy") != string::npos) { continue; // 包含关键字则跳过 } valid.push_back(s); // 否则加入有效题目列表 } if (m >= valid.size()) { cout << "Wo AK le" << endl; } else { cout << valid[m] << endl; // 输出第m+1个有效题目(从0开始) } return 0; } ``` ### 代码解释 1. **输入处理**:使用`cin.ignore()`清除缓冲区中的换行符,确保后续的`getline`正确读取整行输入。 2. **过滤题目**:使用`string::find`方法检查题目是否包含需要跳过的子串,若存在则跳过该题。 3. **收集有效题目**:将未被跳过的题目存入`valid`数组。 4. **结果判断**:如果有效题目数量不大于M,说明吉老师已完成所有题目,输出“Wo AK le”;否则输出第M+1个有效题目(数组索引为M)。 这种方法确保正确过滤题目,并按顺序处理有效题目,最终输出正确结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值