赛码网算法练习(三)

这个题目就是判断有累计一共有多少个N,即把所有的距离依次相加,超过N的时候重新技术就行了,但是不知道为什么我的答案就是不行,大神们可以帮我参考一下。
最新答案:
最近重新调试了这个题目,发现思路没有问题,只是题目中估计是只需要到达最后一个村庄就行,而不是到达终点,即把代码中的for循环从0到n+1,改成从0到n即可。我不知道这么理解对不对,但是这么改完代码ac,不知道是否有别的理解,下面给出ac的Python代码。
#!/usr/bin/env python
# coding=utf-8
while 1:
li = raw_input();
if li:
m,n = map(int,li.split())
#print E,n
#E 能量 n 村庄个数
li2=raw_input()
road=map(int,li2.split())
if max(road)>m: print 0;break
cnt=0
E=m
for i in xrange(0,n):
print i
if E>=road[i]:
E = E-road[i]
else:
cnt=cnt+1
E=m-road[i]
print cnt
else:
break
题目网址:http://exercise.acmcoder.com/online/online_judge_ques?ques_id=2267&konwledgeId=139
#include"stdafx.h" #include<stdio.h> #include <iostream> using namespace std; int main() { int N, n; int *road; while (cin >> N >> n){ //输入所有信息 road 保存路程的距离 road = new int[n + 1]; for (int i = 0; i < n + 1; i++){ scanf("%d", &road[i]); } //设定补给次数技术cnt int cnt = 0; int energy = N;//energy 表示当前的能量值,从第一个村庄开始走 for (int k = 0; k < n; k++){ if (road[0]>N) return 0; //如果当前能量值减去到达当前村庄后的能量不足以到达下一村庄,那么补充能量,计数加1,否则减去到达当前村庄的能量即可 if (energy - road[k] < road[k + 1]){ cnt++; energy = N; } else energy = energy - road[k]; } printf("%d\n", cnt); } }

浙公网安备 33010602011771号