问题 1153: 【C语言训练】谁家孩子跑最慢*

时间限制: 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值