C趣味程序百例(17)谁家孩子跑最慢

C趣味程序百例(17)谁家孩子跑最慢,第1张

C趣味程序百例(17)谁家孩子跑最慢,第2张

57.谁的孩子跑得最慢李的三个家庭各有三个孩子。一天,来自三个家庭的九个孩子参加了短跑比赛。规定不分年龄,第一名得9分,第二名得8分,以此类推。结果每个家庭的总分都是一样的,这些孩子没有同时到达终点,也没有一个家庭的两三个孩子连续获得名次。已知一等奖由李家子弟夺得,二等奖由王家子弟夺得。问谁家孩子得了最后一名?
*问题分析及算法设计
根据题目的条件,有1+2+3+...+9=45分,每个孩子的分数应该是15分。根据问题的意思可以知道,一等奖是李家子弟得的,二等奖是王家子弟得的,所以可以得出结论,三等奖一定是张家子弟得的。从“这些孩子没有同时到达终点”可以看出,排名不可能并列,从“没有家庭的两三个孩子获得连接排名”可以看出,第四名不可能是张的孩子。
在程序中,为了方便,直接用分数表示。
*程序和程序注释
# include
int score[4][4];
void main()
{
int I,j,k,who
score[1][1]= 7;/*根据已知条件初始化:score[1]:张家三个孩子的分数*/
score[2][1]= 8;/*score[2]:王家三个孩子的分数*/
score[3][1]= 9;/*李家三个孩子的分数*/
for(I = 4;I for(j = 4;j for(k = 4;我!=j&&k if(k!=i&&k!=j&&15-i-score[1][1]!=15-j-score[2][1] /*分数不能并列*/
&&15-i-score[1][1]!= 15k-score[3][1]
& & 15j-score[2][1]!= 15-k-score[3][1])
{
score[1][2]= I;分数[1][3]= 15-I-7;/*记录数组中满足条件的结果*/
score[2][2]= j;分数[2][3]= 15-j-8;
score[3][2]= k;分数[3][3]= 15-k-9;
}
for(who=0,I = 1;I for(j = 1;j {
printf("%d ",score[I][j]);/*输出每个孩子的分数*/
if(score[I][j]= = 1)who = I;/*记录最后一个家族序号*/
}
if(who==1) /*输出最终判决结果*/
printf("最后一个到达终点的是张家的孩子。\ n ");
else if(who = = 2)
printf("最后到达终点的是王家的孩子。\ n ");
else printf("最后到达终点的是李家的孩子。\ n ");
}
*跑步成绩
7 5 3
8 6 1
9 4 2
最后到达终点的是王家的孩子。
(最后一个是王家的孩子。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C趣味程序百例(17)谁家孩子跑最慢

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情