2022-5-16 牛客网练习
描述
给出一个正整数 N 和长度 L ,找出一段长度大于等于 L 的连续非负整数,他们的和恰好为 N 。答案可能有多个,我我们需要找出长度最小的那个。
例如 N = 18 L = 2:
5 + 6 + 7 = 18
3 + 4 + 5 + 6 = 18
例如 N = 18 L = 2:
5 + 6 + 7 = 18
3 + 4 + 5 + 6 = 18
都是满足要求的,但是我们输出更短的 5 6 7
数据范围: 1 \le n \le 10^{9} \1≤n≤109 , 2 \le L \le 100 \2≤L≤100
输入描述:
输入数据包括一行: 两个正整数N(1 ≤ N ≤ 1000000000),L(2 ≤ L ≤ 100)
输出描述:
从小到大输出这段连续非负整数,以空格分隔,行末无空格。如果没有这样的序列或者找出的序列长度大于100,则输出No
1 import java.util.*; 2 3 public class Main { 4 public static void main(String[] args){ 5 Scanner in = new Scanner(System.in); 6 int n=in.nextInt(); 7 int l=in.nextInt(); 8 for (int i=l-1;i<=99;i++){ 9 if ((2*n-i*i-i)>=0&&(2*n-i*i-i)%(2*i+2)==0) { 10 int first=(2*n-i*i-i)/(2*i+2); 11 for (int j=first;j<first+i;j++){ 12 System.out.print(j+" "); 13 } 14 System.out.println(first+i); 15 return; 16 } 17 } 18 System.out.print("No"); 19 //return; 20 } 21 22 }
思路:等差数列求和。