解题思路:
李,张,王家一共九名孩子,第一名是李家孩子,第二名是王家孩子,不能并列,比赛结果各家总分相同
这题的重点在于各家总分相同,且名次不会重复
先用数学思路来理解,各家总分相同,即9名孩子总分:1+2+3+4+5+6+7+8+9=45分
每一家的分数只能是45的被除数,即45/3=15分/每家;
也就是说,第三名肯定是张家的孩子.
我们不妨再换个思路来想,从赌博的方式来思考:
假设李张王三个人是牌友,且三人都只剩三张牌, 假设是玩逆向干瞪眼:
(干瞪眼的玩法就是下一家只能出比上一家大的牌,且那张牌只能是相邻的,即上家出3下家只能4,先
如果没有则跳过出牌,优先出完手中的牌的玩家获胜)
(逆向干瞪眼则是下一家只能出比上一家小的,且相邻的牌,即上家出3,下家只能出2)
那么根据题意,三人手牌为:
李:9,4,2
王:8,6,1
张:7,5,3
根据手牌,最后一位出牌的是王家,所以王是最后一名
通过直接提交代码:
#include<stdio.h>
int main()
{
printf("W");
return 0;
}
都可以通过提交,反馈的也是正确,验证了我的想法.
但是!!!!!!
直接提交张家和李家最后一名也可以:
#include<stdio.h>
int main()
{
printf("L");
return 0;
}
和
#include<stdio.h>
int main()
{
printf("Z");
return 0;
}
注意事项:
参考代码:
#include <stdio.h>
int score[4][4];
int 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++) //李家第二范围
for(j=4;j<7;j++) //王家第二范围
for(k=4;i!=j&&k<7;k++) //张家第二范围 ,3个for语句说明了3家中都没有相连名次
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])
//第一个与表示张家第二成绩不同于李家王家,第2,3,4,个与表 示3家第3名成绩不一样
{
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) //最后一名得分成绩为1
who=i;
}
if(who==1)
printf("最后一名是张家孩子\n");
else if(who==2)
printf("最后一名是王家孩子\n");
else
printf("最后一名是李家孩子");
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复