首页 > 试题广场 >

数字序列第n位的值

[编程题]数字序列第n位的值
  • 热度指数:8609 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个无限长的数字序列1,2,2,3,3,3,4,4,4,4,5,5,5,5,5。。。(数字序列从1开始递增,且数字k在该序列中正好出现k次),求第n项是多少

数据范围:

输入描述:
输入为一个整数n


输出描述:
输出一个整数,即第n项的值
示例1

输入

4

输出

3

备注:
如:输入为3,有序数列第3项的值为2,则输出为2
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int sum = 0;
        int count = 1;
        while (sum < a) {
            sum += count;
            count++;
        }
        System.out.println(count - 1);
    }
}

发表于 2023-08-02 15:27:50 回复(0)
二分查找
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();
    }
}


发表于 2020-04-30 15:35:33 回复(0)
//如:输入为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);
    }
}

发表于 2020-04-18 16:12:16 回复(0)
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);
        }
    }
}
你们都好厉害,只有我这么笨的方法吗(大哭)
发表于 2020-02-28 12:24:40 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        for (int i = 1; ; i++) {
            if (a >= (i * i - i) / 2 + 1 && a <= (i * i + i) / 2) {
                System.out.println(i);
                break;
            }
        }
    }
}

发表于 2019-09-11 10:43:49 回复(0)
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));
    }
}

发表于 2019-09-09 21:47:55 回复(0)
Java解答
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int i = input.nextInt();
        int n = 1;
        while(i>0){
            i = i-n;
            n++;
        }
        System.out.println(n-1);
    }
}

编辑于 2019-08-02 19:47:48 回复(0)