dポイントプレゼントキャンペーン実施中!

A,B,C,D,Eの五人は次のことがわかっている

●Aが欠席ならBは出席
●AとCの少なくともどちらかが欠席ならEも欠席
●Bが出席ならDとEのうち片方のみが欠席

ある3人欠席した
確実に欠席した人を全てあげよ

質問者からの補足コメント

  • 出てきたのは1人だけだったのですが、合っているかどうか答え合わせがしたいです。よろしくお願いします。

      補足日時:2022/08/26 23:46

A 回答 (3件)

ある3人欠席した



Eが出席と仮定する
AとCの少なくともどちらかが欠席ならEも欠席だから
Eは出席に矛盾するから
AとCは両方ともに出席となって
A,C,Eの3人が出席となるから
欠席者は2人以下となるから
3人欠席した事に矛盾するから
Eは確実に欠席した

ACが出席BDEが欠席の場合矛盾は無い
BDが出席ACEが欠席の場合矛盾は無い

だから

確実に欠席したのは
E
1人だけである
    • good
    • 1
この回答へのお礼

一緒の答えになりました!!やったー!!ありがとうございます!

考え方もおんなじです嬉しいもんですね

お礼日時:2022/08/27 12:20

なお、確認はRでやりました。


以下はRのスクリプトです。
コンピュータにやらせれば、凡ミスによる洩れは無くなります。

rm(list = ls())

A <- c(0, 1)
B <- c(0, 1)
C <- c(0, 1)
D <- c(0, 1)
E <- c(0, 1)

xx <- expand.grid(A,B,C,D,E)
colnames(xx) <- c("A","B","C","D","E")

xx$result <- 1

for(i in 1:nrow(xx)){
x <- xx[i, ]
xx$result[i] <- ifelse(x$A == 1, ifelse(x$B == 0, 1, 0), xx$result[i])
xx$result[i] <- ifelse(x$A + x$C > 0, ifelse(x$E == 1, xx$result[i] * 1, 0), xx$result[i])
xx$result[i] <- ifelse(x$B == 0, ifelse(x$D + x$E == 1, xx$result[i] * 1, 0), xx$result[i])
xx$result[i] <- ifelse(sum(x[, 1:5]) == 3, xx$result[i] * 1, 0)
}

xx[xx$result == 1, ]
    • good
    • 1
この回答へのお礼

コンピュータに実行させるにはこんなプログラムになるんですか!すごー!(IT系じゃないので何もわからないけど)
質問してみるものですね才能溢れる人に出会えた気分です。ありがとうございます

お礼日時:2022/08/27 12:20

効率的な方法を思いつくことが出来ません。


全てのケースを列挙して、非該当を消していく「エラトステネスのふるい法」でやってみました。

手作業でやるなら、和が3になるケースだけ取り出すのが早いです。
すると、下の表のケースが残り、共通しているのはEだと分かります。

①全てのケースから和が3になるケースだけ取り出すと・・・

No A B C D E result 1 2 3
_8 1 1 1 0 0   0 × ×
12 1 1 0 1 0   0 × ×
14 1 0 1 1 0   0   ×
15 0 1 1 1 0   0   ×
20 1 1 0 0 1   0 ×  
22 1 0 1 0 1   1    
23 0 1 1 0 1   1    
26 1 0 0 1 1   0     ×
27 0 1 0 1 1   1    
29 0 0 1 1 1   0     ×

②結果が1(TRUE)になったものは・・・

No A B C D E result 1 2 3
22 1 0 1 0 1   1    
23 0 1 1 0 1   1    
27 0 1 0 1 1   1    

誰かがきっと論理式で示してくれるでしょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!