首页 > 试题广场 >

空中旅行

[编程题]空中旅行
  • 热度指数:10514 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛有羊羊有了属于他们自己的飞机。于是他们进行几次连续的飞行。f[i]表示第i次飞行所需的燃油的升数。飞行只能按照f数组所描述的顺序进行。
起初飞机里有s升燃油,为了正常飞行,每次飞行前飞机内燃油量应大于等于此处飞行所需要的燃油量。请帮助他们计算在不进行加油的情况下他们能进行的飞行次数。

输入描述:
输入包括两行,第一行包括两个整数n和s(1 ≤ n ≤ 50, 1 ≤ s ≤ 1000),分别表示计划飞行的次数和飞起初始状态下有的燃油量。
第二行包括n个整数f[i], (1 ≤ f[i] ≤ 1000), 表示每次计划飞行所需要的燃油量。


输出描述:
输出一个整数,表示他们能进行的飞行次数。
示例1

输入

7 10
1 2 3 4 5 6 7

输出

4
#include<stdio.h>
int main(){
    int sum=0,n,i,x,t,res=0;
    for(scanf("%d%d",&n,&t),i=0;i<n;i++){
        scanf("%d",&x),sum+=x;
        if(sum<=t) res++;
    }
    printf("%d",res);
}

发表于 2017-11-29 17:51:06 回复(0)

分享一个更简单的,只需要每次飞行前检查一下燃油是否还够就好了。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n, s; n = sc.nextInt(); s = sc.nextInt();
        for (int i=0; i<n; i++) {
            int in = sc.nextInt();
            if (s - in < 0) {
                System.out.println(i);
                return;
            }
            s -= in;
        }
        System.out.println(n);
    }
}
发表于 2019-01-19 22:50:07 回复(0)

python 解法

这么简单,怕不是给小学生做的吧?

a, b = map(int, input().split())
c = list(map(int, input().split()))
res = 0
for i in range(a):
    if b >= c[i]:
        res += 1
        b -= c[i]
    else:
        break
print(res)
发表于 2019-02-24 18:43:05 回复(1)
#include <iostream>
using namespace std;
int main()
{
    int n, s, det, cnt = 0;
    cin >> n >> s;
    while (n--)
    {
        cin >> det;
        if (s - det >= 0)
            cnt++,s-=det;
        else break;
    }
    cout << cnt << endl;
    return 0;
}
发表于 2019-03-11 17:21:52 回复(0)
JAVA 
在循环中总的燃料量按顺序减去每一次飞行所需要的燃料量,直到循环结束  (循环结束的条件是 燃料量不能小于零,飞行次数不能大于n
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner (System.in);
		int n=cin.nextInt();//计划飞行的次数
		int s=cin.nextInt();//起初始状态下有的燃油量
		int sum=0;
	    
		while (s>=0 && n>0) {
			s=s-cin.nextInt();
			if(s>=0)sum++;
            n--;
			
		}
		System.out.print(sum);
		

	}

}


发表于 2019-11-05 17:47:46 回复(0)
#include <iostream>
using namespace std;
int main()
{
    int s,n;
    while(cin >> n >> s)
    {
        int a[1000] = {0};
        int i = 0,ans = 0;
        while(n--)
        {
            cin >> a[i++];
        }
        for(int j = 0;j<i;j++)
        {
            if(s>=a[j])
            {
                ans++;
                s = s-a[j];
            }
            else
                break;
        }
        cout << ans << endl;
    }
    return 0;
}

发表于 2019-10-15 23:39:47 回复(0)
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] f = new int[n];
        int s = sc.nextInt();
        int i;
        for (i = 0; i < n; i++) {
            f[i] = sc.nextInt();
        }
        i = 0;
        while (s >= 0 && i < n) {
            s -= f[i++];
        }
        if (i == n) {
            System.out.println(i);
        } else {
            System.out.println(i - 1);
        }
    }
}
发表于 2019-06-14 21:35:28 回复(0)
n,s=list(map(int,input().split()))
f=list(map(int,input().split()))
accum=[0]*n
accum[0]=f[0]
for i in range(n-1):
    accum[i+1]=accum[i]+f[i+1]
for x in accum:
    if x==s:
        print(accum.index(x)+1)
        break
    elif x>s:
        print(accum.index(x))
        break
    elif accum[-1]<s:
        print(n)
        break

发表于 2019-03-20 15:05:39 回复(1)
水题

n, s = map(int, input().split())
f = list(map(int, input().split()))
res = 0
for i, fi in enumerate(f):
    if s < fi:
        break
    s -= fi
    res += 1
print(res)

发表于 2019-03-18 10:17:09 回复(0)
def fly(n, s, f):
    res = 0
    for i in f:
        if s >= i:
            res += 1
            s -= i
        else:
            break
    return res

if __name__ == "__main__":
    n, s = map(int, input().split())
    f = list(map(int, input().split()))
    print(fly(n, s, f))

发表于 2019-03-17 18:45:56 回复(0)
注意边界条件
#include<iostream>
using namespace std;
int main(){
    int n,s;
    cin>>n>>s;
    int* mile=new int[n];
    for(int i=0;i<n;i++)
        cin>>mile[i];
    int total=0,count=0;
    while(total<s){
        if(total+mile[count]>s)
            break;
        total+=mile[count];
        count++;
        if(count==n)
            break;
    }
    cout<<count<<endl;
}

发表于 2019-03-04 15:23:56 回复(0)
#include <bits/stdc++.h>

using namespace std;

int main()
{     int n,s;     while(cin>>n>>s){         int a[n],p;         bool flag = true;          for(int i=0;i<n;i++){             cin>>a[i];             if(s>=a[i])                 s -= a[i];             else{                 if(flag)                     cout<<i<<endl;                 flag = false;             }         }         if(flag)             cout<<n<<endl;     }     return 0;
}

发表于 2019-02-07 01:30:25 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        try(Scanner in = new Scanner(System.in)){
            int n = in.nextInt(),s = in.nextInt(),i = 0;
            int[] a = new int[n];
            while(i < n){
                a[i] = in.nextInt();
                i++;
            }
            System.out.println(helper(a,s));
        }
    }
    public static int helper(int[] a,int s){
        int sum = 0;
        for(int i = 0;i < a.length;i++){
            sum += a[i];
            if(sum > s) return i;
        }
        return a.length;
    }
}


发表于 2019-01-15 21:46:58 回复(0)
# coding=utf-8
while1:
    limit,all=map(int,raw_input().split())
    l=map(int,raw_input().split())
    i=0
    exp=0
    whilei<=limit-1andi<=len(l) andexp<=all:
        ifexp+l[i]<=all:
            exp+=l[i]
            i+=1
        else:
            break
    printi
    break

发表于 2018-07-03 17:34:21 回复(0)
#include<iostream>
#include<vector>
int main()
{
    int n,s,a;
    while(std::cin>>n>>s)
    {
        std::vector<int>f;
        for(int i=0;i<n;i++)
        {
            std::cin>>a;
            f.push_back(a);
        }
        int count=0;
        int a=0;
        int i=-1;
        while(a+f[i+1]<=s&&i+1<=n-1)
        {
            a+=f[i+1];
            count++;
            i++;
        }
        std::cout<<count<<std::endl;

    }
    return 0;
}
发表于 2020-09-20 11:04:35 回复(0)
测试和前端的题也太超级无敌巨简单了把。。
发表于 2020-08-23 13:10:08 回复(0)
var arr1 = readline().split(' ');
var arr2 = readline().split(' ');
var sum = arr1[1];
var max = 0;
var count = 0;
var flag = false;
for(var i = 0;i<arr2.length;i++){
    max += parseInt(arr2[i]);
    if(max > sum){
        flag = true;
        count = i;
        break;
    }
}
if(!flag){
    count = arr2.length;
}
//count = arr2.length;
print(count);

发表于 2019-09-03 22:53:37 回复(0)
题目质量低的要命,远远比不上2017 和 2019年的题目,怪不得热度这么低。看了半天我还以为是顺序贪心数组长度,搞了半天原来是首个顺序子数组长度。题目出的质量令人堪忧!
def method(num,s):
    dp = [0 for _ in range(len(num))]
    for i in range(len(num)):
        temp = num[i]
        j = i
        while j<len(num) and temp<=s:
            j += 1
            if j<len(num):
                temp += num[j]
        dp[i] = j-i
    return dp[0]
if __name__=='__main__':
    n,s = list(map(int,input().split()))
    num = list(map(int,input().split()))
    print(method(num,s))


发表于 2019-09-02 21:49:56 回复(0)

爱奇艺的校招编程题也太简单了8!!!

private static int solution(int[] arr, int s) {
    int res = 0;
    int idx = 0;

    while (idx < arr.length && s >= arr[idx]) {
        s -= arr[idx];
        idx++;
        res++;
    }

    return res;
}
发表于 2019-05-17 10:14:21 回复(0)
while True:
    try:
        n,s = map(int,raw_input().split())
        fn = map(int,raw_input().split())
        sm=0
        count=0
        for i in range(n):
            sm+=fn[i]
            if(sm<s or sm==s):
                count+=1
            else:
                break
        print(count)
    except Exception as e:
        break

发表于 2019-05-08 15:57:10 回复(0)