台灣的選舉法令禁止各陣營及媒體在投票日前的一個星期內公佈民調結果,其中最重要的一個因素是要避免「棄保效應」。所謂的「棄保效應」是指選民在得知自己所支持的候選人當選無望時,有可能會把票投給其他比較可能當選的人,以免浪費了自己的一票。假設某選舉有三位候選人來競選一個職位,在「棄保效應」發揮到極致的情形下,所有民調第三名的候選人的支持者都會把票投民調第二名的候選人,也就是他們都會「棄三保二」。給你 A, B, C 三個候選人的支持者人數,請判斷誰會當選?
輸入
輸入有若干筆測試資料,每筆一行。每行有三個以空白隔開的整數 a, b, c 代表候選人 A, B, C 的支持者人數,0 ≤ a, b, c ≤ 2147483647。你可以假設在「棄保效應」之後,不會有相同票數的情形發生。
3 4 5 1 3 5
輸出
請輸出將會當選的人是 A, B 或 C。
B C
解題思路
只有 3 個人,用巢狀 if 判斷即可,注意人數相加會超過 int 範圍要使用 unsigned 或 long long。
完整程式碼
AC (1ms, 88KB)
#include<stdio.h>
intmain() { longlong a, b, c; while (scanf(" %lld %lld %lld", &a, &b, &c) == 3) { if (a > b && a > c) { if (a > b + c)puts("A"); elseif (b > c)puts("B"); elseputs("C"); } elseif (b > a && b > c) { if (b > a + c)puts("B"); elseif (a > c)puts("A"); elseputs("C"); } else { if (c > a + b)puts("C"); elseif (a > b)puts("A"); elseputs("B"); } } return0; }
intmain() { int n, now, ans, gap; while (scanf(" %d", &n) == 1) { now = gap = 1, ans = 0; for (int i = 0; i < 50; i++) ans += now, now += gap, gap += n; printf("%d\n", ans); } return0; }
intmain() { int n, m, key, * idx; scanf(" %d %d", &n, &m); for (int i = 0; i < n; i++) readInt(&list[i]); while (m--) { readInt(&key); if (idx = (int*)bsearch(&key, list, n, sizeof(int), cmp)) putUInt(idx - list + 1, '\n'); else puts("0"); } return0; }
10001 or 10000 and 11101 and 01001 10111 or 10111 or 10010 or 00101 01000 and 01001 or 10011 and 11101 10111 and 00011 or 10010 or 11011 01001 and 10110 or 10010 and 11101