信息学奥赛一本通 1132:石头剪子布 | OpenJudge NOI 1.7 04
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1132:石头剪子布 | OpenJudge NOI 1.7 04
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1132:石頭剪子布
OpenJudge NOI 1.7 04:石頭剪子布
【題目考點】
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;elsecout<<"Player2"<<endl;}if(strcmp(s1, "Scissors") == 0){if(strcmp(s2, "Paper") == 0)cout<<"Player1"<<endl;elsecout<<"Player2"<<endl;}if(strcmp(s1, "Paper") == 0){if(strcmp(s2, "Rock") == 0)cout<<"Player1"<<endl;elsecout<<"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;elsecout<<"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;elsecout<<"Player2"<<endl;}return 0; }解法4:用二維數組保存出拳的勝負關系
用1表示石頭,2表示剪刀,3表示布
設整型二維數組w,w[i][j]表示玩家1出拳為i同時玩家2出拳為j時的結果,1表示玩家1勝,-1表示玩家1敗,0表示平局。
將這一二維數組初始化后,進行查詢。
總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1132:石头剪子布 | OpenJudge NOI 1.7 04的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1127:图像旋转)
- 下一篇: 信息学奥赛一本通(1173:阶乘和)