跑步

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


*问题分析与算法设计
按题目的条件,共有1+2+3+…+9=45分,每家的孩子的得分应为15分。根据题意可知:获第一名的是李家的孩子,获第二名的是王家的孩子,则可推出:获第三名的一定是张家的孩子。由“这些孩子没有同时到达终点的”可知:名次不能并列,由“没有一家的两个或三个孩子获得相连的名次”可知:第四名不能是张家的孩子。
程序中为了方便起见,直接用分数表示。
 1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     int score[4][4];
  6     int i, j, k, who;
  7     score[1][1]=7;
  8     score[2][1]=8;
  9     score[3][1]=9;
 10     for (i = 4; i < 6; i++)
 11         for (j = 4; j < 7; j++)
 12             for (k = 4; i != j&&k < 7; k++)
 13                 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[3][1])
 14                 {
 15                     score[1][2]=i;
 16                     score[1][3]=15-i-7;
 17                     score[2][2]=j;
 18                     score[2][3]=15-j-8;
 19                     score[3][2]=k;
 20                     score[3][3]=15-k-9;
 21                 }
 22               for (who = 0,i = 1; i < 4; i++,printf("\n"))
 23                   for (j = 1; j <= 3; j++)
 24                   {
 25                       printf("%d",score[i][j]);
 26                       if (1==score[i][j])
 27                       {
 28                           who=i;
 29                       }
 30                   }
 31               if (1==who)
 32               {
 33                   printf("THe last one arrived to end is a child from family zhang.\n");
 34               }
 35               else if (2==who)
 36               {
 37                   printf("THe last one arrived to end is a child from family wang.\n");
 38               }
 39               else
 40               {
 41                   printf("THe last one arrived to end is a child from family li.\n");
 42               }
 43     return 0;
 44 }
 45 

[root@localhost 57]# ./a.out 
753
861
942
THe last one arrived to end is a child from family wang.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值