下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码。这里简单假设每道选择题都有 4 个选项,有且只有 1 个正确答案。
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行按照 编号-答案
的格式给出一道题的 4 个选项,T
表示正确选项,F
表示错误选项。选项间用空格分隔。
在一行中输出 wifi 密码。
8
A-T B-F C-F D-F
C-T B-F A-F D-F
A-F D-F C-F B-T
B-T A-F C-F D-F
B-F D-T A-F C-F
A-T C-F B-F D-F
D-T B-F C-F A-F
C-T A-F B-F D-F
13224143
思路1:
用字符串来读取每一行的答案,注意有空格,所以用getline(cin, s)来读取,在接受完N之后,要用getchar()读取一下换行符才能用getline,不然换行符也会被读取进字符串。获取字符串的长度,当s[i] == ‘T‘的时候,判断s[i - 2]对应的字符,输出对应的数字。
思路2:
上面的方法需要用2个循环,能不能减少代码量呢?
如果要输入的是N行答案,那么答案的个数就有N * 4个,也就是说,有8行答案的时候,答案的个数就是8 * 4 = 32个,所以只需要循环32次,把一行的每个答案当作是一次输入。
输出的格式形如A-T,定义三个字符a, b, c; a == ‘A‘, b == ‘-‘, c == ‘T ‘,如果 c == ‘T‘ ,那么就输出 a - ‘A‘ + 1 。
思路3:
与N没有关系,输入字符串只要长度为3,且 s[2] == ‘T‘ 就输出是 S[0] - ‘A‘ + 1
思路1
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main() 5 { 6 string s; 7 int N; 8 cin >> N; 9 getchar(); 10 for (int i = 0; i < N; ++i) 11 { 12 getline(cin, s); 13 for (int j = 0; j < s.size(); ++j) 14 { 15 if (s[j] == ‘T‘) 16 { 17 if (s[j - 2] == ‘A‘) 18 { 19 cout << 1; 20 } 21 else if (s[j - 2] == ‘B‘) 22 { 23 cout << 2; 24 } 25 else if (s[j - 2] == ‘C‘) 26 { 27 cout << 3; 28 } 29 else if (s[j - 2] == ‘D‘) 30 { 31 cout << 4; 32 } 33 } 34 } 35 } 36 return 0; 37 }
思路2
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 char a, b, c; 6 int N; 7 cin >> N; 8 N *= 4; 9 10 for (int i = 0; i < N; ++i) 11 { 12 cin >> a >> b >> c; 13 if (c == ‘T‘) 14 { 15 cout << a - ‘A‘ + 1; 16 } 17 } 18 return 0; 19 }
思路3
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main() 5 { 6 string s; 7 8 while (cin >> s) 9 { 10 if (s.size() == 3 && s[2] == ‘T‘) 11 { 12 cout << s[0] - ‘A‘ + 1; 13 } 14 } 15 return 0; 16 }
原文:https://www.cnblogs.com/47Pineapple/p/11664540.html