聪明的学生


一位教授逻辑学的教授有三名非常善于推理且精于心算的学生A B C。有一天,教授给他们三人出了一道题:教授在每个人脑门上贴了一张纸条并告诉他们,每个人都纸条上都写了一个正整数,且某两个数的和等于第三个。于是,每个学生都能看见贴在另外两个同学头上的证书,但却看不见自己的数
这时,教授对学生A发问了:你能猜出自己的数吗?A:不能;教授转身问B:你能猜出自己的数吗?B想了想:不能;教授再问C:你能猜出自己的数吗?C想了想:不能。教授又开始重复问A B C,经过若干轮的提问之后,当教授再次询问某人时,此人露出得意的笑容,准确的报出了自己的数。
已知教授共提问了N次,最先猜出自己头上数的人头上贴着的整数为M,求另外两个整数。(总是头上贴着最大的那个数的人最先猜出)
思路:因为总是头上贴着最大的那个数的人最先猜出,而他能猜出自己头上的数,必定是在否定了其他两个数的差。
#include
#define N 5
#define M 8
int getTimes(int i,int j,int t1,int t2,int t3);
int getP(int x,int y);
main()
{
	int i;
	int temp;
	int t1,t2,t3;
	temp = M >> 1;
	if(N%3 == 1){
		t1 = 2;
		t2 = 3;
		t3 = 1;
	}
	else{
		if(N%3 == 2){
			t1 = 1;
			t2 = 3;
			t3 = 2;
		}
		else{
			t1 = 1;
			t2 = 2;
			t3 = 3;
		}
	}
	for(i=1;i j){
			return getTimes(j,i-j,t2,t3,t1) + getP(t1,t3);
		}
		else{
			return getTimes(i,j-i,t1,t3,t2) + getP(t2,t3);
		}
	}
}
int getP(int x,int y)
{
	if(x < y){
		return y - x;
	}
	else{
		return y + 3 - x;
	}
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注