1. 程式人生 > >OpenJudge百鍊習題解答(C++)--題2704:競賽評分

OpenJudge百鍊習題解答(C++)--題2704:競賽評分

題:

總時間限制: 
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; }