首页 > 试题广场 >

不要三句号的歪

[编程题]不要三句号的歪
  • 热度指数:10873 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}在书写超过 3 个的连续的数字时,我们通常会将第一、二项和最后一项写出,中间的部分使用三个英文句号作为省略号 \texttt{...} 替代,例如,2,3,\texttt{...},7 其实就是使用省略号省略了 4,5,6 这三个数字。
\hspace{15pt}现在,对于给定的数列,你需要直接求解出省略了多少数字。

输入描述:
\hspace{15pt}在一行上输入一个长度不超过 20 的字符串。具体的规范为:仅包含三个无符号十进制整数 a,b,c \left( 0 \leq a,b,c \leq 10^{12};\,a + 1 =b;\,b + 1 <c \right) ,形如 \underline{a}\texttt{,}\underline{b}\texttt{,...,}\underline{c};数字 ab 间使用一个半角逗号间隔;省略号部分由三个连续半角句号构成,且前后各有一个半角逗号。


输出描述:
\hspace{15pt}在一行上输出一个整数代表被省略的数字数量。
示例1

输入

2,3,...,7

输出

3
示例2

输入

1,2,...,100000000

输出

99999997
假如不止一个“...”

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<String> list = Arrays.asList(in.nextLine().split(","));
        int i = list.indexOf("...");
        long res = 0;
        while (i != -1) {
            res += Long.valueOf(list.get(i + 1)) - Long.valueOf(list.get(i - 1))-1;
            list = list.subList(i+1, list.size());
            i = list.indexOf("...");
        }
        System.out.println(res);
    }
}

发表于 2025-11-25 23:29:15 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String[] arr = in.nextLine().split(",");
        int n = arr.length;
        long prev = 0L, next = 0L;
        for(int i = 1; i < n - 1; i++){
            if(arr[i].equals("...")){
                prev = Long.parseLong(arr[i - 1]);
                next = Long.parseLong(arr[i + 1]);
            }
        }
        System.out.println(next - prev - 1);
    }
}
发表于 2025-08-30 16:38:26 回复(0)

用str来保存控制台输入的字符串,用“,”来分割成字符数组,用字符数组最后一个数减去第一个数再减2即得到答案。注意要用Long把字符转换为long类型整数,不然不行。7.17
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            String[] strmap = str.split(",");
            Long last = Long.valueOf(strmap[strmap.length - 1]);
            Long pre = Long.valueOf(strmap[1]);

            System.out.println(last - pre - 1);
        }
    }
}


发表于 2025-07-17 13:57:29 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String[] str=in.nextLine().split(",");
            System.out.println(Long.parseLong(str[3])-Integer.parseInt(str[1])-1);
        }
    }
}

发表于 2025-04-05 15:52:52 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            String[] arr = str.split(",");
            long start = Long.parseLong(arr[1]);
            long end = Long.parseLong(arr[arr.length - 1]);
            System.out.println(end - start - 1);
        }
    }
}
发表于 2025-03-26 22:31:39 回复(0)
将输入String 转换成 String[] 用 String自带的 split()方法, 根据‘,’来split
        获取省略号后的数即最后一位数arr[arr.length-1], 获取省略号前的数即第二位数arr[1],
        求解出省略了多少数字 arr[arr.length-1]-arr[1]-1 
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] arr=sc.nextLine().split(",");
        
        System.out.println((Long.parseLong(arr[arr.length-1])-Integer.parseInt(arr[1])-1));
    }


发表于 2025-02-28 16:37:14 回复(0)