牛牛有羊羊有了属于他们自己的飞机。于是他们进行几次连续的飞行。f[i]表示第i次飞行所需的燃油的升数。飞行只能按照f数组所描述的顺序进行。
起初飞机里有s升燃油,为了正常飞行,每次飞行前飞机内燃油量应大于等于此处飞行所需要的燃油量。请帮助他们计算在不进行加油的情况下他们能进行的飞行次数。
输入包括两行,第一行包括两个整数n和s(1 ≤ n ≤ 50, 1 ≤ s ≤ 1000),分别表示计划飞行的次数和飞起初始状态下有的燃油量。 第二行包括n个整数f[i], (1 ≤ f[i] ≤ 1000), 表示每次计划飞行所需要的燃油量。
输出一个整数,表示他们能进行的飞行次数。
7 10 1 2 3 4 5 6 7
4
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; } }
分享一个更简单的,只需要每次飞行前检查一下燃油是否还够就好了。
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); } }
#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;
}
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); } }
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); } } }
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
#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; }
# coding=utf-8while1:limit,all=map(int,raw_input().split())l=map(int,raw_input().split())i=0exp=0whilei<=limit-1andi<=len(l) andexp<=all:ifexp+l[i]<=all:exp+=l[i]i+=1else:breakprintibreak
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);
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))
爱奇艺的校招编程题也太简单了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; }