NOIP2016提高组初赛阅读程序写结果2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOIP2016提高组初赛阅读程序写结果2相关的知识,希望对你有一定的参考价值。

 #include <iostream>
using namespace std;
int main() {
char a[100][100], b[100][100];
string c[100];
string tmp;
int n, i = 0, j = 0, k = 0, total_len[100], length[100][3];
cin >> n;
getline(cin, tmp);//what?我也不懂这个tmp有什么用
for (i = 0; i < n; i++) {
getline(cin, c[i]);
total_len[i] = c[i].size();//记录c[i]的长度
}
for (i = 0; i < n; i++) {
j = 0;
while (c[i][j] != :) {//c[i][j]是string变量的一种表达,表示字符串c[i]的第j个字符
a[i][k] = c[i][j];//扫描c[i],当c[i]的第j个字符不为":"时,将c[i]的字符存入a[i][k]中,即把c[i]字符串":"前的所有字符存入a[i][k]中
k = k + 1;//如果满足c[i][j]的第j个字符不为":",就可以做到将c[i][0]-->c[i][j]中的字符存入a[i][0]-->a[i][k](k==j)中
j++;
}
length[i][1] = k - 1;//记录":"前的字符的个数
a[i][k] = 0;//记录":"所在的位置
k = 0;
for (j = j + 1; j < total_len[i]; j++) {//由于j是扫描到":"后的值再+1,所以此时的c[i][j]为":"后输入的字符
b[i][k] = c[i][j];//扫描":"后的所有字符,将其存入b[][]中
k = k + 1;
}
length[i][2] = k - 1;//记录":"后的字符的个数
b[i][k] = 0;//记录终点位置
k = 0;
}
for (i = 0; i < n; i++) {
if (length[i][1] >= length[i][2])//如果":"前的字符比":"后的字符个数多
cout << "NO,";//输出"NO"
else {
k = 0;
for (j = 0; j < length[i][2]; j++) {//找":"后的字符
if (a[i][k] == b[i][j])//如果":"前的字符在":"后有出现
k = k + 1;//找下一个":"前的符是否有出现(不从头找而是从当前位置往后找)
if (k > length[i][1])//如果k的值比":"前的字符长度大,即已经找完了":"前的所有字符,那么退出循环
break;
}
if (j == length[i][2])//如果j的值和":"后的字符串长度相等,即在扫描到最后一个点时,无论":"前的字符是否被找完,都输出"NO,"
cout << "NO,";
else
cout << "YES,";//如果在找完字符串之前已经找到了":"前的字符,那么输出"YES,"
}
}
cout << endl;
return 0;
}

输入:3
AB:ACDEbFBkBD
AR:ACDBrT
SARS:Severe Atypical Respiratory Syndrome
输出:
_________
(注:输入各行前后均无空格)

 

 

  本人后来在编译器上模拟了一遍,发现"AB:AB"这样的输入会输出"NO",才发现这个程序原来还有这个小细节(虽然不会影响考试),这道题一开始做的时候感觉很痛苦(因为在试卷上是分页的......),但后来放在一起看发现还挺简单的。。。。。。

几个细节要注意:

  一是注意它输出的是"YES,"和"NO,",注意不要引发一场关于逗号的血案......

  二是本蒟蒻才知道原来string定义的变量是可以用c[i][j]这样的形式表示字符串c[i]的第j个变量,感觉和vector差不多

  具体做法的话应该就是自己跑一遍程序   orz

以上是关于NOIP2016提高组初赛阅读程序写结果2的主要内容,如果未能解决你的问题,请参考以下文章

NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 2.

NOIP2016提高组初赛

NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 3.

Noip2017 提高组初赛 游(baozha)记

noip提高组的C语言历届复赛试题

Noip提高组pascal题目