Create Table dbo.Cards(
c integer Primary key)
続いて、1~6 までの値を設定する。
INSERT INTO dbo.Cards(c)
Values
(1)
,(2)
,(3)
,(4)
,(5)
,(6)
CREATE VIEW AllCases AS
SELECT
Card1.c AS c1
, Card2.c AS c2
FROM
Cards AS Card1
, Cards AS Card2
WHERE
Card1.c <> Card2.c
場合分けの数は次のようになる。
SELECT
COUNT(*) AllCasesNum
FROM
AllCases
結果は
AllCasesNum |
---|
30 |
(c1 % 2 = 0) AND (c2 % 2 = 0)
一方「1枚だけに5以上の数値が記入している」というのは次のようになる。
((c1 >= 5) AND (c2 < 5))
OR ((c1 < 5) AND (c2 >= 5))
この条件の場合の数を次で求める。
SELECT
COUNT(*) Q1_CasesNum
FROM
AllCases
WHERE
((c1 % 2 = 0) AND (c2 % 2 = 0))
AND (
((c1 >= 5) AND (c2 < 5))
OR ((c1 < 5) AND (c2 >= 5)))
結果は
Q1_CasesNum |
---|
4 |
(1 - c1 % 2) + (1 - c2 % 2)
一方、5以上の枚数は、整数同士の除法演算が整除になることから
(c1 / 5 + c2 / 5)
で求められる。
したがって、各場合で m,n を求め、そのうえで m>n となる場合の数を求めるには次のようになる。
SELECT
COUNT(*) AS Q2_CasesNum
FROM
(
SELECT
c1, c2
, (1 - c1 % 2) + (1 - c2 % 2) AS m
, (c1 / 5 + c2 / 5) AS n
FROM
AllCases) AllCasesWithMN
WHERE
m > n
結果は
Q2_CasesNum |
---|
14 |