赞
踩
农场主牛牛开始用无人机给他的农田施肥,农田共有n行,无人机携带了m千克肥料,无人机的施肥方式为:
给第1行施1千克肥料;
给第2行施1千克肥料;
…
给第n-1行施1千克肥料;
给第n行施1千克肥料;
…
即每次给整个农田施一边肥料,无人机就会自动更改方向继续施肥直到无人机携带的肥料用完为止
现在牛牛想知道每行最终施了多少肥料
函数传入两个正整数n和m分别代表农田的行数和无人机携带的肥料数,你需要返回一个数组,假设数组为a,表示第i+1行被灌溉了多少千克的肥料
示例:
输入:4,6
输出:[1,2,2,1]
//思路: //n行,m千克 //把无人机从第1行到返回来的第2行位置 设为一趟(每趟都是从第一行开始返回来的第二行位置,如上图所示) //用肥料数除以一趟需要的肥料 得到无人机的趟数 //余数y为多余可洒的行数 //如果x == 0,则不够一趟 //有m<=n和n<m<2n-2两种情况 //否则x > 0, //第一行和第n行的肥料数为x //第二行到第n-1行肥料数为2x //有y<=n和n<y<2n-2两种情况 public class Demo8 { public long[] FarmerNN(int n,long m){ long[] arr = new long[n]; long x = m/(2*n-2); long y = m%(2*n-2); if(x == 0){ if(m<=n){ for (int i = 0; i < m ; i++) { arr[i] = 1; } }else{ for (int i = 0; i < n ; i++) { arr[i] = 1; } arr[0] = 1; arr[n-1] = 1; long num1 = m-n; for (int i = 0; i < num1 ; i++) { arr[n-i-2] += 1; } } }else{//次数大于1回 arr[0] = x; arr[n-1] = x; for (int i = 1; i < n-1 ; i++) { arr[i] = x*2; } if(y<=n){ for (int i = 0; i < y ; i++) { arr[i]+=1; } }else{ for (int i = 0; i < n ; i++) { arr[i]+=1; } long num2 = y-n; for (int i = 0; i < num2 ; i++) { arr[n-i-2] += 1; } } } return arr; } public static void main(String[] args) { Demo8 demo8 = new Demo8(); long []arr1 = demo8.FarmerNN(6,29); System.out.println(Arrays.toString(arr1)); } }
如有错误,还请指正
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。