
输入样例:
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
输出样例:
5 3 2
2 3 5
B B
思路1:
1.利用结构体设置两个变量,为甲、乙的手势
2.输入甲乙手势
3.记录甲赢输的次数(即对应乙输赢的次数)和平的次数
4.利用map<char,int>分别存储甲乙使用'C','J','B'的所赢次数,键为字符,值为int次数。
5.考虑甲乙所有输出可能,存储对应的甲赢,甲输,平的次数,以及每次各自赢的时候所使用的字符的次数。
6.设置最大数次数临时变量max,用来找出最多赢得次数最多的对应字符。和设置临时字符变量,并初始化为B!!!!!(由int型值找字符型键)
代码1:
#include<bits/stdc++.h>
using namespace std;
struct Quan{
char x;
char y;
};
int main(){
int n;
cin>>n;
Quan quan[n];
for(int i = 0; i < n; i++){
cin>>quan[i].x>>quan[i].y;
}
int x_ying=0;
int x_shu=0;
int ping=0;
map<char,int>mp1,mp2;
mp1['C']=0;//甲赢得比重
mp1['B']=0;
mp1['J']=0;
mp2['B']=0;//乙赢的比重
mp2['C']=0;
mp2['J']=0;
for(int i = 0; i < n; i++){
if(quan[i].x=='C' && quan[i].y=='J'){
x_ying++;
mp1['C']++;
}
if(quan[i].x=='C' && quan[i].y=='B'){
x_shu++;
mp2['B']++;
}
if(quan[i].x=='J' && quan[i].y=='C'){
x_shu++;
mp2['C']++;
}
if(quan[i].x=='J' && quan[i].y=='B'){
x_ying++;
mp1['J']++;
}
if(quan[i].x=='B' && quan[i].y=='C'){
x_ying++;
mp1['B']++;
}
if(quan[i].x=='B' && quan[i].y=='J'){
x_shu++;
mp2['J']++;
}
if((quan[i].x=='C' && quan[i].y=='C') || (quan[i].x=='J' && quan[i].y=='J') || (quan[i].x=='B' && quan[i].y=='B')){
ping++;
}
}
cout<<x_ying<<" "<<ping<<" "<<x_shu<<endl;
cout<<x_shu<<" "<<ping<<" "<<x_ying<<endl;
map<char,int>::iterator it;
int max1=0;
char temp1='B';
for(it=mp1.begin();it!=mp1.end();it++){
if(it->second>max1){
max1=it->second;
temp1=it->first;
}
}
cout<<temp1<<" ";
int max2=0;
char temp2='B';
for(it=mp2.begin();it!=mp2.end();it++){
if(it->second>max2){
max2=it->second;
temp2=it->first;
}
}
cout<<temp2;
return 0;
}
注意:
1.查找最多次数对应的字符时,要分别设置两个最大值max=0,和两个临时字符变量,并且初始化一定为“B”
(题目要求“如果解不唯一,则输出按字母序最小的解。”)
2.迭代器可以只设置一个。 map<char,int>::iterator it;
思路2:
1.与思路一不同的是不用map存储字符与对应的次数(一体)
2.采用设置字符数组(按顺序存放字符)和存放次数的int数组,每次对应字符的次数加1,
再遍历查找次数最大的下标,即就是输出对应的字符。(分成两部分)
char str[3]={'B','C','J'};//0,1,2分别对应B,C,J(从小到大输出,题目中提示!)
int x_cnt[3]={};//记录甲的str数组字符对应的次数
int y_cnt[3]={};//记录乙的str数组字符对应的次数
代码2:
#include<bits/stdc++.h>
using namespace std;
struct Quan{
char x;
char y;
};
int main(){
int n;
cin>>n;
Quan quan[n];
for(int i = 0; i < n; i++){
cin>>quan[i].x>>quan[i].y;
}
int x_res[3]={
};//存储甲 赢(0)输(1)平(2) 的次数
char str[3]={
'B','C','J'};//0,1,2分别对应B,C,J(从小到大输出,题目中提示!)
int x_cnt[3]={
};//记录甲的str数组字符对应的次数
int y_cnt[3]={
};//记录乙的str数组字符对应的次数
for(int i = 0; i < n; i++){
if(quan[i].x=='C' && quan[i].y=='J'){
x_res[0]++;
x_cnt[1]++;
}
if(quan[i].x=='C' && quan[i].y=='B'){
x_res[1]++;
y_cnt[0]++;
}
if(quan[i].x=='J' && quan[i].y=='C'){
x_res[1]++;
y_cnt[1]++;
}
if(quan[i].x=='J' && quan[i].y=='B'){
x_res[0]++;
x_cnt[2]++;
}
if(quan[i].x=='B' && quan[i].y=='C'){
x_res[0]++;
x_cnt[0]++;
}
if(quan[i].x=='B' && quan[i].y=='J'){
x_res[1]++;
y_cnt[2]++;
}
if((quan[i].x=='C' && quan[i].y=='C') || (quan[i].x=='J' && quan[i].y=='J') || (quan[i].x=='B' && quan[i].y=='B')){
x_res[2]++;
}
}
cout<<x_res[0]<<" "<<x_res[2]<<" "<<x_res[1]<<endl;
cout<<x_res[1]<<" "<<x_res[2]<<" "<<x_res[0]<<endl;
//甲
int max1=0;//当成值
int temp=0;
for(int i = 0; i < 3; i++){
if(x_cnt[i]>max1){
max1=x_cnt[i];
temp=i;//记录第几个
}
}
//乙
int max2=0;//当成下标
for(int i = 0; i < 3; i++){
if(y_cnt[i]>y_cnt[max2]){
max2=i;//记录第几个
}
}
cout<<str[temp]<<" "<<str[max2];
}