zoukankan      html  css  js  c++  java
  • 5、 越野跑

    描述

        为了能在下一次跑步比赛中有好的发挥,贝茜在一条山路上开始了她的训练。贝茜希望能在每次训练中跑得尽可能远,不过她也知道农场中的一条规定:奶牛独自进山的时间不得超过M秒(1 <= M <= 10,000,000)。    整条山路被贝茜划分成T个长度相同的小段(1 <= T <= 100,000),并且,贝茜用S_i表示第i个小段的路况。S_i为u,f,d这3个字母之一,它们分别表示第i个小段是上坡、平地,或是下坡。    贝茜要花U秒(1 <= U <= 100)才能跑完一段上坡路,跑完一段平地的耗时是F秒(1 <= F <= 100),跑完一段下坡路要花D秒(1 <= D <= 100)。注意,沿山路原路返回的时候,原本是上坡路的路段变成了下坡路,原本是下坡路的路段变成了上坡路。    贝茜想知道,在能按时返回农场的前提下,她最多能在这条山路上跑多远。

    输入格式

    输入格式:* 第1行: 5个用空格隔开的整数:M,T,U,F,以及D*
    第2..T+1行: 第i+1行为1个字母S_i,描述了第i段山路的路况

    输出格式

    输出格式:* 第1行: 输出1个整数,为贝茜在按时回到农场的前提下,最多能跑到多远

    测试样例1

    输入

    13 5 3 2 1
    u
    f
    u
    d
    f

    输出

    3

    备注

    输入说明:    贝茜跑步的最大耗时为13秒(这么短...),她跑步的山路一共被划成5段。贝茜跑完一段上坡路的耗时为3秒,平地为2秒,下坡路为1秒。山路各段的走向如下图所示:  _/\_/输出说明:
        贝茜跑完山路的前3段,然后返回,总耗时为3 + 2 + 3 + 1 + 2 + 1 = 12秒,只比她能在外面呆的时限少1秒。如果她跑得更远,就无法按时回到农场。
     
    解题思路:使用动态数组,一个是用于存放路况的字符数组,一个用于存放对应路况的往返时间。最后将往返时间依次相加,直到最接近总时间。
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3  
     4 int main(){
     5     int M, T, U, F, D;
     6     scanf("%d %d %d %d %d", &M, &T, &U, &F, &D);
     7     if (M<1 || M>10000000){
     8         exit(0);
     9     }
    10     if(T<1 || T>100000){
    11         exit(0);
    12     }
    13     if (U<1 || U>100){
    14         exit(0);
    15     }
    16     if (F<1 || F>100){
    17         exit(0);
    18     }
    19     if (D<1 || D>100){
    20         exit(0);
    21     }
    22     int i;
    23     char *con;
    24     int *time;
    25     con = (char*)calloc(T, sizeof(char));
    26     time = (int*)calloc(T, sizeof(int));
    27     for (i = 0; i < T; i++){
    28         scanf("%s", &con[i]);
    29         if (con[i] = 'u'){
    30             time[i] = U + D;
    31         }
    32         else if (con[i] = 'f'){
    33             time[i] = 2 * F;
    34         }
    35         else if (con[i] = 'd'){
    36             time[i] = U + D;
    37         }
    38         else{
    39             exit(0);
    40         }
    41     }
    42     int sum = 0;
    43     int j = 0;
    44     while (sum <= M){
    45         sum += time[j];
    46         j++;
    47     }
    48     int k = j - 1;
    49     sum = sum - time[k];
    50     printf("%d
    ", k);
    51     return 0;
    52 }
    感悟:1、学会使用C语言中动态数组的使用
                int n, *a;
                scanf("%d", &n );
                a = (int*)calloc(n, sizeof(int));
           2、对于字符的输入格式:scanf("%s", &con[i]);  s为字符串,c为字符,但如果使用字符的输入格式可能会加入‘’,所以使用字符串输入格式
  • 相关阅读:
    Android之Handler
    错误一览表
    Android ImageView 的scaletype属性详细介绍 转
    Adobe Flash/Dreamweaver/Fireworks CS3 软件不能安装问题
    MySQL修改表属性的SQL语句
    Apache与Tomcat整合
    mySQL常用SQL语句技法
    今天第一次写博客
    Tomcat+JSP经典配置实例
    整合Apache+Tomcat服务器2
  • 原文地址:https://www.cnblogs.com/langzi1996/p/6399695.html
Copyright © 2011-2022 走看看