农场主牛牛开始用无人机给他的农田施肥,农田共有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));
}
}
如有错误,还请指正