华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
已知连续正整数数列{K}=K1,K2,K3… Ki的各个数相加之和为S, i = N (0 < S < 100000, 0 < N < 100000), 求此数列K。
输入包含两个参数
如果有解就输出数列K,如果无解就输出-1
简而言之,就是给你一个数S,和一个数N;
输出连续的N个数,其和为S。
package com.guor.od;
import java.util.*;
public class OdTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] input = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
// 连续正整数序列之和为S
int S = input[0];
// 数列里数的个数为N
int N = input[1];
int[] arr = new int[N];
arr[N - 1] = S / N;
for (int i = N - 2; i >= 0; i--) {
arr[i] = arr[i + 1] - 1;
}
int[] ans = getArr(arr, S);
if (ans != null) {
for (int i : ans) {
System.out.print(i+" ");
}
} else {
System.out.println(-1);
}
}
static int[] getArr(int[] arr, int S) {
int sum = 0;
while(sum < S) {
for (int i = 0; i < arr.length; i++) {
arr[i]++;
}
sum=0;
for (int i : arr) {
sum += i;
}
if (sum == S) {
return arr;
}
}
return null;
}
}
525 6
85 86 87 88 89 90
下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。