1. 程式人生 > >1046. 划拳

1046. 划拳

划拳是古老中國酒文化的一個有趣的組成部分。酒桌上兩人划拳的方法為:每人口中喊出一個數字,同時用手比劃出一個數字。如果誰比劃出的數字正好等於兩人喊出的數字之和,誰就贏了,輸家罰一杯酒。兩人同贏或兩人同輸則繼續下一輪,直到唯一的贏家出現。

下面給出甲、乙兩人的划拳記錄,請你統計他們最後分別喝了多少杯酒。

輸入格式:

輸入第一行先給出一個正整數N(<=100),隨後N行,每行給出一輪划拳的記錄,格式為:

甲喊 甲劃 乙喊 乙劃

其中“喊”是喊出的數字,“劃”是劃出的數字,均為不超過100的正整數(兩隻手一起劃)。

輸出格式:

在一行中先後輸出甲、乙兩人喝酒的杯數,其間以一個空格分隔。

輸入樣例:
5
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
輸出樣例:
1 2

 演算法:

  1. 演算法開始。
  2. 讀取N。
  3. 如果i不小於N,跳到第六步。
  4. 讀取四個數字,如果有唯一的勝者,對手喝酒杯數加一。
  5. i加一,回到第三步。
  6. 輸出喝酒杯數。
  7. 演算法結束。
時間複雜度為O(n)。空間複雜度為O(1)。 下列程式碼編寫於VS2015,修改scanf_s即可在PAT上AC。
#include <stdio.h>
int main(void) {
	int count1 = 0, count2 = 0, i, n;
	int a1, a2, b1, b2;
	scanf_s("%d", &n);
	for (i = 0; i < n; i++) {
		scanf_s("%d %d %d %d", &a1, &a2, &b1, &b2);
		if (a2 == a1 + b1 && b2 != a1 + b1) {
			count2++;
		}
		else if (b2 == a1 + b1 && a2 != a1 + b1) {
			count1++;
		}
	}
	printf("%d %d", count1, count2);
	return 0;
}