Try   HackMD

前言

高一基礎程式設計期中考

很多人都在問我為什麼免修了還要來考試
但其實免修

滿分
免修只是拿到平常成績的40%而已

題外 : 聽說平常成績40%期中19%
加起來59% 看起來期末不讀不行XD

Scoreboard

Skyoj的Rank感覺怪怪的不知道順序到底怎麼排的
ps. 深綠色是首殺:)

scoreboard

scorebroad

考試過程

???

一開始的時候要登入帳號
結果我一直登不進去:(
到最後還是借用上一班的34號的帳號XD
登不進去我覺得是因為我第一次登入skyoj是在家裡登的
然後考試的時候被ip鎖掉:P

解題順序

14:32
pA
AC

14:36
pB
WA

14:38
pB
AC
(second submission)

14:41
pC
WA

14:42
pC
WA
(second submission)

14:44
pD
AC

14:46
pE
AC

14:49
pC
WA
(third submission)

14:50
pC
AC
(fourth submission)

總計 :

19
mins
  
5
AC
4
WA

題目

  • pA 中間數
    難度 : :star:

    題意 :
    給三數

    a
    b
    c

    假如三數有相同的兩數或三數
    輸出 ERROR!
    否則輸出中間數(a > b > c 輸出 b)
    範例輸入 1:

    ​​​​1 2 3
    

    範例輸出 1:

    ​​​​2
    

    範例輸入 2:

    ​​​​5 87 2
    

    範例輸出 2:

    ​​​​5
    

    想法 :
    1.把

    a
    b
    c
    排序 然後輸出b

    2.數學解 通靈
    mid=a+b+cmax(a,b,c)min(a,b,c)

    code(數學解)
    ​​​​#include <bits/stdc++.h> ​​​​using namespace std; ​​​​int main() { ​​​​ int a, b, c; cin >> a >> b >> c; ​​​​ if(a == b || b == c || c == a) { ​​​​ cout << "ERROR\n"; ​​​​ } else { ​​​​ cout << a + b + c - max(a, max(b, c)) - min(a, min(b, c)) << '\n'; ​​​​ } ​​​​}

    解題心得 :
    數學解蠻難想的
    但只要有想到大概實作一分鐘(?

  • pB 成績計算進階
    難度 : :star:

    題意 :

    13 個 數字
    Ai
    1i13

    A1
    ~
    A11
    11
    次平時考
    A12 A13
    是期中末成績(各
    20
    %)

    平時成績扣掉最高的一次
    ÷10
    就是最終平常成績(
    60
    %)

    輸出最後的學期總成績(平常成績
    ×60
    % + 期中末成績
    ×40
    %)

    範例輸入 1:

    ​​​​60 62 60 34 67 34 81 38 29 10 34 34 12
    

    範例輸出 1:

    ​​​​34.88
    

    想法 :
    輸入後維護平常考的最大值

    code(WA 60%)
    ​​​​#include <bits/stdc++.h> ​​​​using namespace std; ​​​​int main() { ​​​​ cout << fixed << setprecision(2); ​​​​ double ans = 0; ​​​​ int mx = 0; ​​​​ // 平常成績輸入 ​​​​ for(int i = 0; i < 11; i++) { ​​​​ int a; cin >> a; ​​​​ mx = max(mx, a); ​​​​ ans += a; ​​​​ } ​​​​ ans -= mx; ​​​​ ans *= 6; ​​​​ // 期中末輸入 ​​​​ for(int i = 0; i < 2; i++) { ​​​​ int a; cin >> a; ​​​​ ans += a*20; ​​​​ } ​​​​ cout << ans/100 << '\n'; ​​​​}
    code(AC)
    ​​​​#include <bits/stdc++.h> ​​​​using namespace std; ​​​​int main() { ​​​​ // cout << fixed << setprecision(2); ​​​​ // 題目沒說要限定到小位數2... ​​​​ double ans = 0; ​​​​ int mx = 0; ​​​​ // 平常成績輸入 ​​​​ for(int i = 0; i < 11; i++) { ​​​​ int a; cin >> a; ​​​​ mx = max(mx, a); ​​​​ ans += a; ​​​​ } ​​​​ ans -= mx; ​​​​ ans *= 6; ​​​​ // 期中末輸入 ​​​​ for(int i = 0; i < 2; i++) { ​​​​ int a; cin >> a; ​​​​ ans += a*20; ​​​​ } ​​​​ cout << ans/100 << '\n'; ​​​​}

    解題心得 :
    下次要看清楚題目

  • pC 排列數
    難度 : :star2:

    題意 :
    給兩數

    n
    m

    Pmn

    1mn25

    範例輸入 1:

    ​​​​15 10
    

    範例輸出 1:

    ​​​​10897286400
    

    範例輸入 2:

    ​​​​3 2
    

    範例輸出 2:

    ​​​​6
    

    想法 :
    first :

    n!/(nm)!
    second :
    n×(n1)...×(nm+1)

    code(WA 80%)
    ​​​​#include <bits/stdc++.h> ​​​​using namespace std; ​​​​#define ll long long ​​​​int main() { ​​​​ vector<ll> v(100); ​​​​ v[0] = 1; // 0! = 1 ​​​​ for(int i = 1; i < 50; i++) { ​​​​ v[i] = v[i-1]*i; ​​​​ } ​​​​ int n, m; cin >> n >> m; ​​​​ cout << v[n]/v[n-m+1] << '\n'; ​​​​}

    因為

    25!1025 然後
    long
    long
    只到
    1018

    code(AC)
    ​​​​#include <bits/stdc++.h> ​​​​#define ll long long ​​​​using namespace std; ​​​​int main() { ​​​​ int n, m; cin >> n >> m; ​​​​ ll ans = 1; ​​​​ for(int i = n; i >= n-m+1; i--) { ​​​​ ans *= i; ​​​​ } ​​​​ cout << ans << '\n'; ​​​​}

    解題心得 :
    被數學誤導吃了3次WA

  • pD 骰子
    難度 : :star:

    題意 :

    n 代表接下來會有
    n
    個數字
    Ai
    (
    1in
    )

    1Ai6
    代表骰子

    輸出各個骰子點數共出現幾次
    Input :
    7 1 2 2 3 4 5 6
    output :

    ​​​​1:*
    ​​​​2:**
    ​​​​3:*
    ​​​​4:*
    ​​​​5:*
    ​​​​6:*
    

    想法 :
    照題目寫AC

    code
    ​​​​#include <bits/stdc++.h> ​​​​using namespace std; ​​​​int p[6]; ​​​​int main() { ​​​​ int n; cin >> n; ​​​​ for(int i = 0; i < n; i++) { ​​​​ int a; cin >> a; ​​​​ p[a-1]++; ​​​​ } ​​​​ for(int i = 1; i <= 6; i++) { ​​​​ cout << i << ':'; ​​​​ // cout << setw(p[i-1]+1) << setfill('*') << '\n'; ​​​​ for(int j = 0; j < p[i-1]; j++) { ​​​​ cout << '*'; ​​​​ } ​​​​ cout << '\n'; ​​​​ } ​​​​}

    解題心得 :
    有用到陣列一點點(假如要秒解的話)

  • pE 聯誼
    難度 : :star:

    題意 :
    給二數

    f
    m
    代表女孩跟男孩

    接著會有三種情況 :
    假如 女孩的人數
    男孩的人數 且 男孩的人數為女孩人數的倍數的話

    輸出 Happy
    假如 女孩的人數
    >
    男孩的人數 且 女孩的人數為男孩人數的倍數的話

    輸出 Sad
    其他可能輸出 (R開頭的單字 我忘了QQ)
    範例輸入 1:

    ​​​​3 2
    

    範例輸出 1:

    ​​​​R....
    

    範例輸入 2:

    ​​​​9 1
    

    範例輸出 2:

    ​​​​Sad
    

    範例輸入 3:

    ​​​​5 10
    

    範例輸出 3:

    ​​​​Happy
    

    想法 :
    照題目寫 開3個if

    code
    ​​​​#include <bits/stdc++.h> ​​​​using namespace std; ​​​​int p[6]; ​​​​int main() { ​​​​ int a, b; cin >> a >> b; ​​​​ if(a <= b && b % a == 0) { ​​​​ cout << "Happy\n"; ​​​​ } else if(a > b && a % b == 0) { ​​​​ cout << "Sad\n"; ​​​​ } else { ​​​​ cout << "R....\n"; ​​​​ } ​​​​}

    解題心得 :
    水題放在最後有點不尊重ㄛ:)