赛码网算法练习(三)

这个题目就是判断有累计一共有多少个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);

    }
}

 

posted @ 2016-08-08 09:51  沐雨橙风fire  阅读(1422)  评论(0编辑  收藏  举报