7-1 2018final世界盃也瘋狂之球隊積分計算(20 分)
阿新 • • 發佈:2018-11-04
這是一個世界盃賽場,有球隊類,其中,隊名、記錄每場比分的陣列、累計積分 是其三個私有資料成員;有兩個成員函式,分別是根據各場比分計算累計積分、以及計算淨勝球總和。請新增適當的建構函式。 積分計算規則是:勝者得三分,負者不得分,打平雙方各得一分。
輸入格式:
輸入僅一行,表示這個球隊資訊,分別是 1或2(1表示該隊是主隊,2表示該隊是客隊)、若干場比分(主隊進球數:客隊進球數,場數小於20)。每項資訊間以空格隔開。
輸出格式:
輸出一行,分別是該隊的累計積分和淨勝球數,兩項資訊間以空格隔開。
輸入樣例:
在這裡給出一組輸入。例如:
1 3:5 5:0 2:2 3:7
輸出樣例:
在這裡給出相應的輸出。例如:
4 -1
本題是我們的期末考試題,唯一的難點是輸入資料的提取。
錯誤示例:
int main() { int ty;cin>>ty;int score = 0,win = 0; int x,y;string s; getline(cin,s); int num = s.size()/4; switch (ty) { case 1: { for(int i=1;i<s.size();i += 4) { x = s[i] - '0'; y = s[i+2] - '0'; if(x>y){score+=3;win++;} if(x==y){score++;} if(x<y){win--;} } cout<<score<<" "<<win; break; } case 2: { for(int i=1;i<s.size();i += 4) { x = s[i] - '0'; y = s[i+2] - '0'; if(y>x){score+=3;win++;} if(x==y){score++;} if(y<x){win--;} } cout<<score<<" "<<win; break; } } return 0; }
錯因:誤以為按回車結束輸入,然而題目的意思是持續(檔案)輸入,讀到停止標誌才結束。
正確示例:
#include <iostream> #include <string> using namespace std; int main() { int ty;cin>>ty; int score = 0,win = 0; char x,y,b; while(cin>>x>>b>>y)//用while(scanf("%d:%d",&x,&y)!=EOF)可能更妥當一點 { //cout<<"x="<<x<<" b="<<b<<" y="<<y<<endl; if(ty==1) { if(x>y){score+=3;win++;} else if(x==y){score++;} else if(x<y){win--;} } if(ty==2) { if(y>x){score+=3;win++;} else if(x==y){score++;} else if(y<x){win--;} } //cout<<score<<" "<<win<<endl; } cout<<score<<" "<<win; return 0; }