日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1132:石头剪子布 | OpenJudge NOI 1.7 04

發(fā)布時(shí)間:2025/3/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1132:石头剪子布 | OpenJudge NOI 1.7 04 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目鏈接】

ybt 1132:石頭剪子布
OpenJudge NOI 1.7 04:石頭剪子布

【題目考點(diǎn)】

1. 字符串處理

2. 判斷字符串相同

  • s1,s2是字符數(shù)組,判斷二者是否相同:strcmp(s1,s2)==0為真,二者相同,否則二者不同。
  • s1,s2是string類(lèi)對(duì)象,判斷二者是否相同:s1 == s2為真,二者相同,否則二者不同。

【解題思路】

先輸入n,循環(huán)n次,每次輸入兩個(gè)字符串

  • 如果這兩個(gè)字符串相同,輸出Tie
  • 如果第一個(gè)字符串表示的出拳勝過(guò)第二個(gè)字符串表示的出拳,輸出Player1
  • 如果第二個(gè)字符串表示的出拳勝過(guò)第一個(gè)字符串表示的出拳,輸出Player2
    在兩個(gè)字符串不同的前提下,如何比較兩個(gè)字符串表示的出拳誰(shuí)勝誰(shuí)負(fù),有不同的方法實(shí)現(xiàn)。

1. 使用三個(gè)判斷語(yǔ)句:

  • 如果玩家1出剪刀
    • 如果玩家2出石頭,玩家2贏
    • 如果玩家2出布,玩家1贏
      再寫(xiě)出“如果玩家1出石頭”,“如果玩家1出布”的判斷語(yǔ)句,即可完成判斷

2. 使用邏輯表達(dá)式

  • 如果玩家1出剪刀且玩家2出布,或玩家1出石頭且玩家2出剪刀,或玩家1出布且玩家2出石頭,此時(shí)玩家1贏。
  • 否則,玩家2贏

3. 初始化二維數(shù)組來(lái)記錄勝負(fù)規(guī)則,需要時(shí)查詢(xún)二維數(shù)組。

【題解代碼】

解法1:使用字符數(shù)組,三個(gè)判斷語(yǔ)句

判斷字符串相同使用strcmp函數(shù),判斷一個(gè)字符串是不是剪刀,就寫(xiě)為: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類(lèi),邏輯表達(dá)式

#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:使用字符數(shù)組,邏輯表達(dá)式,只比較首字母

因?yàn)镽ock, Paper, Scissors三個(gè)單詞首字母不同,所以在做比較時(shí),實(shí)際不需要比較單詞,只比較首字母也可以達(dá)到目的。

#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:用二維數(shù)組保存出拳的勝負(fù)關(guān)系

用1表示石頭,2表示剪刀,3表示布
設(shè)整型二維數(shù)組w,w[i][j]表示玩家1出拳為i同時(shí)玩家2出拳為j時(shí)的結(jié)果,1表示玩家1勝,-1表示玩家1敗,0表示平局。
將這一二維數(shù)組初始化后,進(jìn)行查詢(xún)。

#include <bits/stdc++.h> using namespace std; int w[4][4];//w[i][j]表示玩家1出拳為i同時(shí)玩家2出拳為j時(shí)的結(jié)果,1表示玩家1勝,-1表示玩家1敗,0表示平局。 int toNum(char s[])//將字符數(shù)組s轉(zhuǎn)化為數(shù)字,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出拳對(duì)應(yīng)的數(shù)字 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;elsecout<<"Player2"<<endl;}return 0; } 新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通 1132:石头剪子布 | OpenJudge NOI 1.7 04的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。