【题目链接】
【题目考点】
1. 字符串处理
2. 判断字符串相同
- s1,s2是字符数组,判断二者是否相同:
strcmp(s1,s2)==0为真,二者相同,否则二者不同。 - s1,s2是string类对象,判断二者是否相同:
s1 == s2为真,二者相同,否则二者不同。
【解题思路】
先输入n,循环n次,每次输入两个字符串
- 如果这两个字符串相同,输出Tie
- 如果第一个字符串表示的出拳胜过第二个字符串表示的出拳,输出Player1
- 如果第二个字符串表示的出拳胜过第一个字符串表示的出拳,输出Player2
在两个字符串不同的前提下,如何比较两个字符串表示的出拳谁胜谁负,有不同的方法实现。
1. 使用三个判断语句:
- 如果玩家1出剪刀
- 如果玩家2出石头,玩家2赢
- 如果玩家2出布,玩家1赢
再写出“如果玩家1出石头”,“如果玩家1出布”的判断语句,即可完成判断
2. 使用逻辑表达式
- 如果玩家1出剪刀且玩家2出布,或玩家1出石头且玩家2出剪刀,或玩家1出布且玩家2出石头,此时玩家1赢。
- 否则,玩家2赢
3. 初始化二维数组来记录胜负规则,需要时查询二维数组。
【题解代码】
解法1:使用字符数组,三个判断语句
判断字符串相同使用strcmp函数,判断一个字符串是不是剪刀,就写为:strcmp(s1, "Scissors") == 0
#include <bits/stdc++.h> using namespace std; int main() {
char s1[10], s2[10]; int n; cin>>n; for(int i = 0; i < n; ++i) {
cin>>s1>>s2; if(strcmp(s1, s2) == 0) cout<<"Tie"<<endl; else {
if(strcmp(s1, "Rock") == 0) {
if(strcmp(s2, "Scissors") == 0) cout<<"Player1"<<endl; else cout<<"Player2"<<endl; } if(strcmp(s1, "Scissors") == 0) {
if(strcmp(s2, "Paper") == 0) cout<<"Player1"<<endl; else cout<<"Player2"<<endl; } if(strcmp(s1, "Paper") == 0) {
if(strcmp(s2, "Rock") == 0) cout<<"Player1"<<endl; else cout<<"Player2"<<endl; } } } return 0; }
讯享网
解法2:使用string类,逻辑表达式
讯享网#include <bits/stdc++.h> using namespace std; int main() {
string s1, s2; int n; cin>>n; for(int i = 0; i < n; ++i) {
cin>>s1>>s2; if(s1 == s2) cout<<"Tie"<<endl; else {
if(s1 == "Rock" && s2 == "Scissors" || s1 == "Scissors" && s2 == "Paper" || s1 == "Paper" && s2 == "Rock") cout<<"Player1"<<endl; else cout<<"Player2"<<endl; } } return 0; }
解法3:使用字符数组,逻辑表达式,只比较首字母
因为Rock, Paper, Scissors三个单词首字母不同,所以在做比较时,实际不需要比较单词,只比较首字母也可以达到目的。
#include <bits/stdc++.h> using namespace std; int main() {
char s1[10], s2[10]; int n; cin>>n; for(int i = 0; i < n; ++i) {
cin>>s1>>s2; if(s1[0] == s2[0]) cout<<"Tie"<<endl; else if (s1[0] == 'R' && s2[0] == 'S' || s1[0] == 'S' && s2[0] == 'P' || s1[0] == 'P' && s2[0] == 'R') cout<<"Player1"<<endl; else cout<<"Player2"<<endl; } return 0; }
解法4:用二维数组保存出拳的胜负关系
用1表示石头,2表示剪刀,3表示布
设整型二维数组w,w[i][j]表示玩家1出拳为i同时玩家2出拳为j时的结果,1表示玩家1胜,-1表示玩家1败,0表示平局。
将这一二维数组初始化后,进行查询。
讯享网#include <bits/stdc++.h> using namespace std; int w[4][4];//w[i][j]表示玩家1出拳为i同时玩家2出拳为j时的结果,1表示玩家1胜,-1表示玩家1败,0表示平局。 int toNum(char s[])//将字符数组s转化为数字,Rock为1,Scissors为2,Paper为3 {
switch(s[0]) {
case 'R': return 1; case 'S': return 2; case 'P': return 3; } } void initW() {
w[1][1] = w[2][2] = w[3][3] = 0; w[1][2] = w[2][3] = w[3][1] = 1; w[2][1] = w[3][2] = w[1][3] = -1; } int main() {
initW(); char s1[10], s2[10]; int n, n1, n2;//n1,n2:玩家1,2出拳对应的数字 cin>>n; for(int i = 0; i < n; ++i) {
cin>>s1>>s2; n1 = toNum(s1); n2 = toNum(s2); if(w[n1][n2] == 0) cout<<"Tie"<<endl; else if(w[n1][n2] == 1) cout<<"Player1"<<endl; else cout<<"Player2"<<endl; } return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/41753.html