有一个无限长的数字序列1,2,2,3,3,3,4,4,4,4,5,5,5,5,5。。。(数字序列从1开始递增,且数字k在该序列中正好出现k次),求第n项是多少
数据范围: 
import java.util.Scanner;
/**
* @Date: 2020-04-30 15:26
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int l = 1;//最小是1
int r = n;//上界是n
int mid ;
while (l<=r){
mid=(l+r)>>1;
if ((1+mid)*mid/2==n){
System.out.println(mid);
sc.close();
System.exit(0);
}
if ((1+mid)*mid/2<n)
l=mid+1;
else
r=mid-1;
}
System.out.println(l);
sc.close();
}
} //如:输入为3,有序数列第3项的值为2,则输出为2
/*
等差求和公式1+2+3+4+5+6+7+8+9
有这个规律可知,当输入的n在i*(i+1)/2与(i+1)*(i+2)/2之间的时候,第n项的值就是i+1
最后我们进行了除2的优化,减少了循环次数
*/
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int flag = 0;
for(int i = 0;i<= n/2;i++){
int min = i*(i+1);
int max = (i+1)*(i+2);
if(min < 2*n && max >=2*n){
flag = i+1;break;
}
}
System.out.println(flag);
}
} import java.util.Scanner;
//import java.lang.Integer.MAX_VALUE;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
if(x == 1){
System.out.println(1);
}else{
int ans = 0;
int index = -1;
for(int i = 1;i <= Integer.MAX_VALUE;i++){
ans += i;
if(x >= ans && x <= (ans + i + 1)){
index = i + 1;
break;
}
}
System.out.println(index);
}
}
} 你们都好厉害,只有我这么笨的方法吗(大哭)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<Integer> list = new ArrayList<>();
for(int i = 1; i <= n; i++){
int j = 0;
while(j < i){
list.add(i);
j++;
}
}
System.out.println(list.get(n-1));
}
}