逻辑推理与判断-谁家孩子跑最慢

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

1.问题分析与算法设计

 按题目的条件,共有1+2+3+…+9=45分,每家的孩子的得分应为15分。据题意可知:获第一名的是李家的孩子,获得第二名的是王家的孩子,则可推出:或第三名的一定是张家的孩子,由“这些孩子没有同时到达终点的”可知,名次不能并列,由“没有一家的两个或三个孩子获得相连的名词”可知:第四名不能使张家的孩子。

 程序中为了方便起见,直接使用分数表示。

2.程序与程序注释

#include <stdio.h>

 

int score[4][4];

 

void main()

{

 int i,j,k,who;

 

 score[1][1] = 7; //按已知条件进行初始化:score[1]:张家三个孩子的得分

 score[2][1] = 8; //王家三个孩子的得分

 score[3][1] = 9; //李家三个孩子的得分

 

 for(i=4;i<6;i++) //i:张家孩子在4到6段可能的分数

 {

  for(j=4;j<7;j++) //j:王家孩子在4到6段可能的分数

  {

   for(k=4;i!=j&&k<7;k++) //k:李家孩子在4到6分段的分数

   {

    if(k!=i&&k!=j //分数不能并列

    &&15-i-score[1][1]!=15-j-score[2][1]

    &&15-i-score[1][1]!=15-k-score[3][1]

    &&15-j-score[2][1]!=15-k-score[2][1])

    {

     score[1][2] = i; //将满足条件的结果记入数组

     score[1][3] = 15-i-7;

 

     score[2][2] = j;

     score[2][3] = 15-j-8;

 

     score[3][2] = k;

     score[3][3] = 15-k-9;

    }

   }

  }

 }

 

 for(who=0,i=1;i<=3;i++,printf("\n"))

 {

  for(j=1;j<=3;j++)

  {

   printf("%d ",score[i][j]); //输出各家孩子的得分情况

 

   if(score[i][j]==1) //记录最后一名的家庭序号

   {

    who = i;

   }

  }

 }

 

 if(who==1)//输出最后判断的结果

 {

  printf("The last one arrived to end is a child from family Zhang.\n");

 }

 else if(who==2)

 {

  printf("The last one arrived to end is a child from family Wang.\n");

 }

 else

 {

  printf("The last one arrived to end is a child from family Li.\n");

 }

}

3.运行结果

张家 7 5 3

李家 8 6 1

王家 9 4 2

 

因此获最后一名的是王家的孩子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值