时间限制: 1Sec 内存限制: 128MB
题目描述
张王李三家各有三个小孩。一天,三家的九个孩子在一起比赛短跑,规定不分年龄大小,跑第一得9分,跑第2得8分,依此类推。比赛结果各家的总分相同,且这些孩子没有同时到达终点的,也没有一家的两个或三个孩子获得相连的名次。已知获第一名的是李家的孩子,获得第二的是王家的孩子。问获得最后一名的是谁家的孩子?
输入
无
输出
输出最后一名的那家的姓的一个字母且以大写输出(若为张家,则输出Z)
样例输入
无
样例输出
W
Codes&Analysis
总感觉多了一点什么,不清楚一般人的思路是什么。
我做这道题目的思路时进行求最优解的思路。
数组
初始化一个rank[]数组,0下标空置,然后下标就是相应的排名。
初始化一个字符数组,0~2下标依次为Z、W、L,方便最后进行输出。
思路
使用3进制的存储方式,不断进行加一。
每次加一之后,先进性判断是否会出现两个或三个相同的姓氏排在一起。
然后进行判断三家的积分是否相等。
最后进行输出。
首先进行判断是否会超限这种说法。
因为题目中给出的样例输出是有答案的,所以没有必要进行判断数组是否会超限。
其次是进行判断是否出现一家的两个或者三个孩子的名次在一起的情况。
这里是使用一个标记flag。0代表出现,1代表没有出现
化简之后的代码
#include<stdio.h>
int main()
{
//Z--0 W--1 L--2
int rank[10]={
0,2,1,0},j=3,flag;
char s[3]={
'Z','W','L'};
while(1){
rank[3]++;
for(j=3;j<=9;j