谁家孩子跑最慢?

谁家孩子跑最慢?

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

算法分析

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

#include<stdio.h>
main()
{
	int score[4][4];
	score[1][1] = 7;//张姓家庭的孩子得第三名 
	score[2][1] = 8;//王姓家庭的孩子得第二名
	score[3][1] = 9;//李姓家庭的孩子得第一名
	for(int i = 4; i < 6; i++)//张姓孩子只可能拿五六名,故得分4-5
	for(int j = 4; j < 7; j++)//王姓孩子可能拿四-六名,故得分4-6
	for(int k = 4; k < 6; k++)//张姓孩子可能拿四-六名,故得分4-6 
	{
		if(i != j && i != k && k != j)//三家孩子的名次不能相同
		if(15-i-score[1][1]!=15-j-score[2][1]&&
		15-i-score[1][1]!=15-k-score[3][1]&&
		15-k-score[3][1]!=15-j-score[2][1]) //三家孩子在7-9名 名次不能相同 
		{									
			score[1][2] = i;
			score[2][2] = j;
			score[3][2] = k;
			score[1][3] = 15-i-score[1][1];
			score[2][3] = 15-j-score[2][1];
			score[3][3] = 15-k-score[3][1];
		}
	} 
	for(int i = 1; i < 4; i++)
	{
		for(int j = 1; j < 4; j++)
		{
			printf("%d ",score[i][j]);
		}
		printf("\n");
	}
		printf("\n");
	for(int i = 1; i < 4; i++)
	{
		for(int j = 1; j < 4; j++)
		{
			if(score[i][j]==1)	
			{
				printf("%s",i==1?"张家孩子跑的慢!":"") ; 
				printf("%s",i==2?"王家孩子跑的慢!":"") ; 
				printf("%s",i==3?"李家孩子跑的慢!":"") ; 
			}		
		}
	}
}
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页