张王李三家各有三个小孩。一天,三家的九个孩子在一起比赛短跑,规定不分年龄大
小,跑第一得 9 分,跑第 2 得 8 分,依此类推。比赛结果各家的总分相同,且这些孩子
没有同时到达终点的,也没有一家的两个或三个孩子获得相连的名次。已知获第一名的
小,跑第一得 9 分,跑第 2 得 8 分,依此类推。比赛结果各家的总分相同,且这些孩子
没有同时到达终点的,也没有一家的两个或三个孩子获得相连的名次。已知获第一名的
是李家的孩子,获得第二的是王家的孩子。问获得最后一名的是谁家的孩子?
思路:
一共有三家,一家有三个孩子,一共有9个结果,可定义一个3*3的二维数组,不能同时到达
终点即分数都不想同,同一家孩子没有相连的名字,即分数不能相连,又因为最后分数相等即45/3==15
李家孩子的了一个9分则第二个李家孩子得分不能超过5,王家的第二个孩子不能超过6,推测出张家第一个儿子
分数为7,张家第二个儿子不能超过6
程序:
#include <stdio.h>
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");
}
}