OpenJudge百鍊習題解答(C++)--題2704:競賽評分
阿新 • • 發佈:2019-01-31
題:
- 總時間限制:
- 1000ms
- 記憶體限制:
- 65536kB
- 描述
- 現舉行一次小競賽,參賽的3支隊伍,編號為1,2,3.每支佇列輪流回答問題,如果回答正確,加10分;回答錯誤,扣10分;放棄回答不得分.經過多輪答題後,我們要統計各隊的名次和得分.
- 輸入
- 第一行為回答問題的輪次數n.
其餘各行分別為1,2,3號隊伍答題的結果,回答正確為right,錯誤為wrong,放棄為give-up. - 輸出
- 按名次輸出各隊的編號和得分.名次相同的在同一行輸出,且編號小者靠前.
- 樣例輸入:
-
4 right wrong give-up right right right wrong right right right right right
- 樣例輸出:
-
(3,30) (1,20)(2,20)
解:
#include<iostream>
#include<string>
using namespace std;
int main()
{
structS{
int All;
int Nu;
};
structS st[3];
for(int i=0;i<3;i++)
{
st[i].All=0;
st[i].Nu=i+1;
}
int n;
cin>>n;
stringA[n][3];
for(int i=0;i<n;i++)
{
for(int j=0;j<3;j++)
{
cin>>A[i][j];
}
}
for(int i=0;i<3;i++)
{
for(int j=0;j<n;j++)
{
if(A[j][i]=="right")
{
st[i].All+=10;
}
else if(A[j][i]=="wrong")
{
st[i].All-=10;
}
}
}
structS t;
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
{
if(st[j].All<st[j+1].All)
{
t=st[j];
st[j]=st[j+1];
st[j+1]=t;
}
}
}
for(int i=0;i<3;i++)
{
if(i>0){
if(st[i].All!=st[i-1].All)
{
cout<<endl;
}
}
cout<<"("<<st[i].Nu<<","<<st[i].All<<")";
}
return 0;
}