写个小程序计算猜数字问题的结果

来源:互联网 发布:陕西省行政区划数据 编辑:程序博客网 时间:2024/06/05 19:56


一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明!
  一天教授给他们出了一个题,教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个!(每个人可以看见另两个数,但看不见自己的)
  教授问第一个学生:你能猜出自己的数吗?回答:不能;
  问第二个,不能;
  第三个,不能;
  再问第一个,不能;
  第二个,不能;
  第三个:我猜出来了,是144!
  教授很满意的笑了。请问您能猜出另外两个人的数吗? 请说出理由!

程序如下:

#include <stdio.h>

#include <stdlib.h>

struct number_guess
{
int num[3];
};

struct guessnumber
{
int nCount;
number_guess guess[128];
};

void savelog(char *pBuffer )
{
FILE * fp = fopen("guess.log", "a+");
if (!fp )
return ;


fwrite(pBuffer,1,strlen(pBuffer),fp);
fclose(fp);
}
guessnumber g_guessnumber[32]={0};
void calcnumber(int curnumber)
{
g_guessnumber[curnumber].nCount = g_guessnumber[curnumber-1].nCount+g_guessnumber[curnumber-2].nCount;
number_guess *pGuess =  g_guessnumber[curnumber].guess;


for (int i =0;i< g_guessnumber[curnumber-2].nCount;i++)
{
memcpy(&pGuess->num,&g_guessnumber[curnumber-2].guess[i].num,3*sizeof(int));
if (0==curnumber%3)
pGuess->num[0] = pGuess->num[1]+pGuess->num[2];
else if (1==curnumber%3)
pGuess->num[1] = pGuess->num[0]+pGuess->num[2];
else if (2==curnumber%3)
pGuess->num[2] = pGuess->num[0]+pGuess->num[1];
pGuess++;
}


for (int i =0;i< g_guessnumber[curnumber-1].nCount;i++)
{
memcpy(&pGuess->num,&g_guessnumber[curnumber-1].guess[i].num,3*sizeof(int));
if (0==curnumber%3)
pGuess->num[0] = pGuess->num[1]+pGuess->num[2];
else if (1==curnumber%3)
pGuess->num[1] = pGuess->num[0]+pGuess->num[2];
else if (2==curnumber%3)
pGuess->num[2] = pGuess->num[0]+pGuess->num[1];
pGuess++;
}




}




int main()
 
{
g_guessnumber[0].nCount =1;
g_guessnumber[0].guess[0].num[0]=2;
g_guessnumber[0].guess[0].num[1]=1;
g_guessnumber[0].guess[0].num[2]=1;


g_guessnumber[1].nCount =2;
g_guessnumber[1].guess[0].num[0]=1;
g_guessnumber[1].guess[0].num[1]=2;
g_guessnumber[1].guess[0].num[2]=1;


g_guessnumber[1].guess[1].num[0]=2;
g_guessnumber[1].guess[1].num[1]=3;
g_guessnumber[1].guess[1].num[2]=1;


g_guessnumber[2].nCount =4;


g_guessnumber[2].guess[0].num[0]=1;
g_guessnumber[2].guess[0].num[1]=1;
g_guessnumber[2].guess[0].num[2]=2;


g_guessnumber[2].guess[1].num[0]=2;
g_guessnumber[2].guess[1].num[1]=1;
g_guessnumber[2].guess[1].num[2]=3;


g_guessnumber[2].guess[2].num[0]=1;
g_guessnumber[2].guess[2].num[1]=2;
g_guessnumber[2].guess[2].num[2]=3;


g_guessnumber[2].guess[3].num[0]=2;
g_guessnumber[2].guess[3].num[1]=3;
g_guessnumber[2].guess[3].num[2]=5;


char szBuffer[10240]="";


for (int i =3;i <8;i++)
{
calcnumber(i);
sprintf(szBuffer ,"%s num=%d,number=%d,",szBuffer ,i+1,g_guessnumber[i].nCount);
for (int j =0;j<g_guessnumber[i].nCount;j++)
{
number_guess *pGuess =  g_guessnumber[i].guess+j;


for (int k=0;k<3;k++)
{
sprintf(szBuffer,"%s%d:",szBuffer ,pGuess->num[k]);


}
strcat(szBuffer,",");
}
strcat(szBuffer,"\n");
}
printf(szBuffer);
savelog(szBuffer);
getchar();
return 0;
}
 
 
 
 
 
原创粉丝点击