一个有趣推理题的答案

题目原文如下:

1.第一个答案是A的问题是哪一个?( )
A、1          B、2          C、3          D、4
2.唯一的连续两个具有相同答案的问题是( )
A、5,6      B、6,7       C、7,8       D、8,9
3.本问题答案和哪一个问题的答案相同( )
A、4         B、9           C、8          D、2
4.答案是A的问题的个数是( )
A、5         B、4           C、3            D、2
5.本问题答案和哪一个问题的答案相同( )
A、1         B、2         C、3          D、4
6.答案选A的问题的个数和答案选什么的问题的个数相同( )
A、无      B、C           C、C          D、D
7.按照字母顺序,本题答案与下一题相差( )(A与B间,或B与A间均相差1)
A、3        B、2         C、1              D、0
8.本题中答案为元音的题数为( )
A、0        B、1          C、2          D、3
9.本题中答案为辅音的题数( )
A、是合数     B、是质数       C、<5          D、是平方数
10.本题答案为( )
A、A          B、B        C、C            D、D



答案的唯一解如下:

A C B C A C D D B A


解题代码如下:

#include<stdio.h>
#include<math.h>
#define ABS(x,y) (x>y?x-y:y-x)
int Question01(void);
int Question02(void);
int Question03(void);
int Question04(void);
int Question05(void);
int Question06(void);
int Question07(void);
int Question08(void);
int Question09(void);
int Question10(void);

int InitAnswet(void);
int FindAnswet(void);
int UpdataAnswet(void);
int PrintAnswet(void);
typedef int(*Question)(void);
int answer[10];
Question question[10];
int main()
{
	InitAnswet();
	FindAnswet();
	//PrintAnswet();
	return 0;
}
int PrintAnswet(void)
{
	int i;
	for(i=0;i<10;i++)
	{
		printf("%c ",answer[i]);
	}
	printf("\n");
	return 1;
}
int InitAnswet(void)
{
	int i;
	for(i=0;i<10;i++)
	{
		answer[i]=‘A‘;
	}
	question[0]=Question01;
	question[1]=Question02;
	question[2]=Question03;
	question[3]=Question04;
	question[4]=Question05;
	question[5]=Question06;
	question[6]=Question07;
	question[7]=Question08;
	question[8]=Question09;
	question[9]=Question10;
	return 1;
}
//ACBCACDDBA
int FindAnswet(void)
{
	int i;
	do 
	{
		for(i=0;i<10;i++)
		{
			if(question[i]()!=1)
			{
				break;
			}
		}
		if(i==10)
		{
			PrintAnswet();
			//break;
		}
	} while (UpdataAnswet()==1);
	return 1;
}
int UpdataAnswet(void)
{
	int i;
	answer[9]+=1;
	for(i=9;i>=1;i--)
	{
		if(answer[i]>‘D‘)
		{
			answer[i]=‘A‘;
			answer[i-1]+=1;
		}
	}
	if(answer[0]>‘D‘)
	{
		return 0;
	}
	return 1;
}
int Question01(void)
{
	int i;
	for(i=0;i<10;i++)
	{
		if(answer[i]==‘A‘)
		{
			break;
		}
	}
	if(i==answer[0]-‘A‘)
	{
		return 1;
	}
	return 0;
}
int Question02(void)
{
	int i,j,idx,a;
	a=answer[1];
	for(i=0,j=0;i<9;i++)
	{
		if(answer[i]==answer[i+1])
		{
			j++;
			idx=i;
		}
	}
	if(j==1)
	{
		if(a==‘A‘&&idx==4)
		{
			return 1;
		}
		if(a==‘B‘&&idx==5)
		{
			return 1;
		}
		if(a==‘C‘&&idx==6)
		{
			return 1;
		}
		if(a==‘D‘&&idx==7)
		{
			return 1;
		}
	}
	return 0;
}
int Question03(void)
{
	int i,a,j,idx;
	a=answer[2];
	if(a==‘A‘&&a==answer[3])
	{
		return 1;
	}
	if(a==‘B‘&&a==answer[8])
	{
		return 1;
	}
	if(a==‘C‘&&a==answer[7])
	{
		return 1;
	}
	if(a==‘D‘&&a==answer[1])
	{
		return 1;
	}
 	return 0;
}
int Question04(void)
{
	int i,j,a;
	a=answer[3];
	for(i=0,j=0;i<10;i++)
	{
		if(answer[i]==‘A‘)
		{
			j++;
		}
	}
	if(j==5&&a==‘A‘)
	{
		return 1;
	}
	if(j==4&&a==‘B‘)
	{
		return 1;
	}
	if(j==3&&a==‘C‘)
	{
		return 1;
	}
	if(j==2&&a==‘D‘)
	{
		return 1;
	}
	return 0;
}
int Question05(void)
{
	int i,a,j,idx;
	a=answer[4];
	if(a==‘A‘&&a==answer[0])
	{
		return 1;
	}
	if(a==‘B‘&&a==answer[1])
	{
		return 1;
	}
	if(a==‘C‘&&a==answer[2])
	{
		return 1;
	}
	if(a==‘D‘&&a==answer[3])
	{
		return 1;
	}
 	return 0;
}
int Question06(void)
{
	int i,a=0,b=0,c=0,d=0;
	for(i=0;i<10;i++)
	{
		if(answer[i]==‘A‘)
		{
			a+=1;
		}
		if(answer[i]==‘B‘)
		{
			b+=1;
		}
		if(answer[i]==‘C‘)
		{
			c+=1;
		}
		if(answer[i]==‘D‘)
		{
			d+=1;
		}
	}
	if(a==c||a==d||(a!=b&&a!=c&&a!=d))
	{
		return 1;
	}
	return 0;
}
int Question07(void)
{
	int a=answer[6];
	if((ABS(a,answer[7]))==(‘D‘-a))
	{
		return 1;
	}
	return 0;
}
int Question08(void)
{
	int i,j;
	for(i=0,j=0;i<10;i++)
	{
		if(answer[i]==‘A‘)
		{
			j++;
		}
	}
	if(j==(answer[7]-‘A‘))
	{
		return 1;
	}
	return 0;
}
int Question09(void)
{
	int i,j,f=0;
	for(i=0,j=0;i<10;i++)
	{
		if(answer[i]!=‘A‘)
		{
			j++;
		}
	}
	if(j==2||j==3||j==5||j==7&&answer[8]==‘B‘)
	{
		return 1;
	}
	if(j==4||j==6||j==8||j==9||j==10&&answer[8]==‘A‘)
	{
		return 1;
	}
	if(j<5&&answer[8]==‘C‘)
	{
		return 1;
	}
	if(j==9||j==0||j==1&&answer[8]==‘D‘)
	{
		return 1;
	}
	return 0;
}
int Question10(void)
{
	return 1;
}


 

 

一个有趣推理题的答案

上一篇:hdu 4292 网络流


下一篇:将一个string字符串变量分解为字符输出