解题思路: 其实题目并不难,只要思路对了,代码其实很简单。
红线表示山路,蓝色表示上山,灰色表示下山,很明显,上山时如果是上坡,那么下山时就变成了下坡;上山时如果是平地,下山时也是平地;上山时如果是下坡,那么下山时就变成了上坡。某一段路T,要么不走,要么走就得来回走两趟,所以解题思路就是一段一段的检查,例如上山第一段是D,下山就是U,如果D+U的时间没有超过M,就说明这一段路是可以走的,而且走也是能在规定时间內返回的,再去看下一段,上山是D,下山是U,如果第一段的上下山时间加上这时的D+U仍旧没有超过M,那么第二段也可以走,如果超过了M,那就说明这一段不能走,否则即便是上山时时间不超,下山时时间也一定会超,所以这一段就不能走,必须立刻掉头下山....依此类推,循环直到第i段时上、下山时间超出了M就结束循环,总共走了i-1段。
参考代码:
#include <string.h> #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int M = 0, T = 0, U = 0, F = 0, D = 0; scanf("%d %d %d %d %d", &M, &T, &U, &F, &D); char roadCondition[T];//T段路的路况 getchar();//吸收回车 for (int i = 0; i < T; ++i) { scanf("%c", &roadCondition[i]);//输入上山的路况 getchar();//吸收回车 } int totalTime = 0;//上山来回一趟所需的总时间 int miles = 0; for (int i = 0; i < T; ++i) { /* * 上山时是上坡,那么下山时一定就是下坡, * 而且上山和下山是绑定在一起的,有上山就一定会有下山 */ if (roadCondition[i] == 'u') { if (totalTime + U + D <= M) {//如果上山+下山时间不超过奶牛进山的时间 totalTime += U + D; miles ++;//路段加1 continue; } else {//加上这一段已经超时,这一段不能加,必须折头返回,结束循环, break; } } if (roadCondition[i] == 'f') { if (totalTime + F + F <= M) { //加上这一段不超时 totalTime += F + F; miles++; continue; } else { //加上这一段已经超时,这一段不能加,必须立刻折头返回,结束循环, break; } } if (roadCondition[i] == 'd') { if (totalTime + D + U <= M) { //加上这一段不超时 totalTime += U + D; miles++; continue; } else { //加上这一段已经超时,这一段不能加,得折头返回,结束循环, break; } } } printf("%d\n", miles); return 0; }
0.0分
6 人评分
不需要数组和指针的做法!!!浏览:1156 |
C语言训练-阶乘和数* (C++代码)(直接输出样例hhhh)浏览:1177 |
2006年春浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:912 |
简单的a+b (C语言代码)浏览:764 |
计算质因子 (C++代码)浏览:1824 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:1215 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:562 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:672 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:574 |
模拟计算器 (C++代码)浏览:885 |