谁家的孩子跑的最慢

张王李三家各有三个小孩。一天,三家的九个孩子在一起比赛短跑,规定不分年龄大
小,跑第一得 9 分,跑第 2 得 8 分,依此类推。比赛结果各家的总分相同,且这些孩子
没有同时到达终点的,也没有一家的两个或三个孩子获得相连的名次。已知获第一名的

是李家的孩子,获得第二的是王家的孩子。问获得最后一名的是谁家的孩子?

 

思路:

一共有三家,一家有三个孩子,一共有9个结果,可定义一个3*3的二维数组,不能同时到达

终点即分数都不想同,同一家孩子没有相连的名字,即分数不能相连,又因为最后分数相等即45/3==15

李家孩子的了一个9分则第二个李家孩子得分不能超过5,王家的第二个孩子不能超过6,推测出张家第一个儿子

分数为7,张家第二个儿子不能超过6

程序:

#include 
main()              
{
	int a[3][3],i,j,k;
	//各自家孩子第一个孩子的分数
	a[0][0]=7;  //张家第一个孩子,可以推算出来
	a[1][0]=8;  //王家第一个孩子
	a[2][0]=9;  //李家第一个孩子
	for (i=4;i<6;i++)
		for (j=4;j<7;j++)
			for (k=4;k<7;k++)
			{
                if ((i!=j&&i!=k&&j!=k)&&          //各自家第二个孩子分数不能相等
					(15-i-a[0][0]!=15-j-a[1][0] &&  //各自家第三个孩子分数不能相等
					15-i-a[0][0]!=15-k-a[2][0] &&
					15-j-a[1][0]!=15-k-a[2][0]))
				{
					a[0][1]=i;a[0][2]=15-7-i;  //给各自家第二个孩子赋值;给第三个孩子赋值
					a[1][1]=j;a[1][2]=15-8-j;  // 第三个孩子分数==总分数-第一个孩子分数-第二个孩子分数
					a[2][1]=k;a[2][2]=15-9-k;
				}
			}
			for (i=0;i<3;i++)
			{
				for (j=0;j<3;j++)
				{
					if (a[i][j]==1)   //1为分数最小的
					{
						if (i==0)
							printf("张家");
						else if (i==1)
							printf("王家");
						else
							printf("李家");
					}
				}
				printf("\n");
			}
}


你可能感兴趣的:(谁家的孩子跑的最慢)