누가 도둑 이 야?

2472 단어 c논리 적 추리
/ * 공안 원 은 네 명의 도둑 용의 자 를 심문 합 니 다.이 네 사람 중 한 명 만 도둑 이라는 것 을 알 고 있 으 며, 이 네 사람 중 한 명 은 성실 하거나 항상 거짓말 을 하 는 것 을 알 고 있다.공안 원 의 질문 에 대답 하 는 중:
갑: "을 은 훔 치지 않 았 어. 딩 이 훔 친 거 야."
나 는 "나 는 훔 치지 않 았 다. 병 이 훔 쳤 다." 라 고 말 했다.
병: "갑 은 훔 치지 않 았 어. 을 이 훔 쳤 어."
딩 은 "나 는 훔 치지 않 았 다." 라 고 말 했다.
이 네 사람의 대답 에 따라 누가 절도범 인지 판단 하 세 요.
* 문제 분석 및 알고리즘 디자인
A, B, C, D 가 각각 네 사람 을 대표 한다 고 가정 하면 변수의 값 은 1 로 이 사람 이 도둑 이라는 것 을 의미한다.
제목 에서 알 수 있 듯 이 네 사람 중 한 명 만 도둑 이 고 이 네 사람 중 한 명 은 진실 을 말 하거나 거짓말 을 했 기 때문에 갑, 을, 병 세 사람 은 모두 두 마디 말 을 했다. "X 는 훔 치지 않 았 고 X 는 훔 쳤 다." 그래서 이 사람 이 거짓말 을 하 든 말 든 그 가 언급 한 두 사람 중 한 명 은 도둑 이다.그러므로 조건 표현 식 을 열거 할 때 누가 거짓말 을 하고 누가 진실 을 말 하 는 지 에 관심 을 두 지 않 아 도 된다.이렇게 하면 다음 조건 식 을 열거 할 수 있 습 니 다.
갑: "을 은 훔 치지 않 았 어. 딩 이 훔 쳤 어."B+D=1
나: "훔 치지 않 았 어 요. 병 이 훔 쳤 어 요." B + C = 1
병: "갑 은 훔 치지 않 았 어. 을 이 훔 쳤 어." A + B = 1
딩: "훔 치지 않 았 어 요." A + B + C + D = 1
그 중에서 정 씨 는 한 마디 만 했 을 뿐 진 위 를 판단 할 수 없 었 고 표현 식 은 네 사람 중 한 명 만 도둑 이라는 조건 을 나 타 냈 다.
* 프로그램 설명 및 설명
#include
void main()
{int i,j,a[4];
for(i=0;i<4;i++)
/ / i 명 만 도둑 이 라 고 가정
{for(j=0;j<4;j++)
/ / i 차 가설 에서 i 번 째 사람 을 도둑 이 라 고 가정 하고 a [i] 를 1 로 설정 하고 나머지 는 0 이다.
{if(j==i)a[j]=1;
else a[j]=0;}
if(a[3]+a[1]==1&&a[1]+a[2]==1&&a[0]+a[1]==1)
/ / 조건 의 성립 여 부 를 판단
{printf("The thief is ");
/ / 성립
for(j=0;j<=3;j++)
/ / 출력 계산 결과
{if(a[j])printf("%c.",j+'A');
}
printf("");}}}
*/
필 자 는 스스로 일반적인 방법 을 생각 했다.
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
int main()
{int a[4];//         
for(int k1=0;k1<2;k1++)
{if(k1)
{ a[1]=0; a[3]=1;}//    
else { a[1]=1; a[3]=0; }
for(int k2=0;k2<2;k2++)
{if(k2&&k1)
 {a[1]=0; a[2]=1;}//            ,  ,    
else if(!k1&&!k2) {a[1]=1; a[2]=0;}
else continue;
for(int k3=0;k3<2;k3++)
{if(k3&&(!k1||!k2))//              ,           
{a[0]=0; a[1]=1;}
else if(!k3&&k1&&k2){a[0]=1; a[1]=0; }
else continue;
for(int k4=0;k4<2;k4++)
{if(k4&&!k1)
	a[3]=0;
else a[3]=1;
if(a[0]+a[1]+a[2]+a[3]==1)
for(int i=0;i<4;i++)
if(a[i]){printf("%d
",i+1); break; } }//end k4 }//end k3; }//end k2; }//end k1; printf("
"); system("pause"); }

좋은 웹페이지 즐겨찾기