2016年9月13日 星期二

APCS 105年3月題1-成績指標(C++參考)

APCS Y16M3-Q1 成績指標  問題描述
  一次考試中,於所有及格學生中獲取最低分數者最為幸運,反之,於所有不及格同學中,獲取最高分數者,可以說是最為不幸,而此二種分數,可以視為成績指標。
  請你設計一支程式,讀入全班成績(人數不固定),請對所有分數進行排序,並分別找出不及格中最高分數,以及及格中最低分數。
  當找不到最低及格分數,表示對於本次考試而言,這是一個不幸之班級,此時請你印出:「worst case」;反之,當找不到最高不及格分數時,請你印出「best case」。
註:假設及格分數為 60,每筆測資皆為 0~100 間整數,且筆數未定。
輸入格式:原題單測資,本參考改為多測資,讀至EOF, 每筆測資說明如下:第一行輸入學生人數,第二行為各學生分數(0~100 間),分數與分數之間以一個空白間格。每一筆測資的學生人數為 1~20 的整數。
輸出格式:每筆測資輸出三行兩筆輸出之間空一列
第一行由小而大印出所有成績 ,兩數字之間以一個空白間格,最後一個數字後無空白;
第二行印出最高不及格分數,如果全數及格時,於此行印出 best case;
第三行印出最低及格分數,當全數不及格時,於此行印出 worst case。
範例輸入:
10
0 11 22 33 55 66 77 99 88 44
3
33 53 13
2
88 66

範例輸出:
0 11 22 33 44 55 66 77 88 99
55
66

13 33 53
53
worst case

66 88
best case
66
參考程式碼:
// apcs-1 成績指標 
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int MaxN = 20;
const int US=101;  //最高分數 +1 
const int LS= -1;  //最低分數 -1
const int PS= 60;  //及格分數 
 
int main()
{
  int i, n , sco;
  int a[MaxN];
  bool first=true;
  while(cin >> n)
  {
     int bsco = US;  //及格最低分 
     int wsco =LS;  // 不及格最高分 
     for(i=0; i<n; ++i)
     {
        cin >> a[i];
        if(a[i]>=PS)
          bsco = min(bsco,a[i]);  //及格最低 
        else
          wsco = max(wsco,a[i]);  //不及格最高
     }
     sort(a,a+n);
     if (first) first = false; else cout << endl;
 cout << a[0];
     for(i=1; i<n; ++i) cout <<' '<< a[i];
     cout << endl;
     if( wsco==LS ) cout << "best case\n";
     else cout << wsco << endl;
     if( bsco==US ) cout << "worst case\n";
     else cout << bsco << endl;
  }
  return 0;
}

0 意見:

張貼留言