首页 > 试题广场 >

区间表达

[编程题]区间表达
  • 热度指数:1458 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛的老师给出了一个区间的定义:对于x ≤ y,[x, y]表示x到y之间(包括x和y)的所有连续整数集合。例如[3,3] = {3}, [4,7] = {4,5,6,7}.牛牛现在有一个长度为n的递增序列,牛牛想知道需要多少个区间并起来等于这个序列。
例如:
{1,2,3,4,5,6,7,8,9,10}最少只需要[1,10]这一个区间
{1,3,5,6,7}最少只需要[1,1],[3,3],[5,7]这三个区间

输入描述:
输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),
第二行n个整数a[i](1 ≤ a[i] ≤ 50),表示牛牛的序列,保证序列是递增的。


输出描述:
输出一个整数,表示最少区间个数。
示例1

输入

5
1 3 5 6 7

输出

3
import java.util.Scanner;

/**
 * 区间表达
 * 牛牛的老师给出了一个区间的定义:对于x ≤ y,[x, y]表示x到y之间(包括x和y)的所有连续整数集合。
 * 例如[3,3] = {3}, [4,7] = {4,5,6,7}.牛牛现在有一个长度为n的递增序列,牛牛想知道需要多少
 * 个区间并起来等于这个序列。
 * 例如:
 * {1,2,3,4,5,6,7,8,9,10}最少只需要[1,10]这一个区间
 * {1,3,5,6,7}最少只需要[1,1],[3,3],[5,7]这三个区间
 * 输入描述:
 * 输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),
 * 第二行n个整数a[i](1 ≤ a[i] ≤ 50),表示牛牛的序列,保证序列是递增的。
 * 输出描述:
 * 输出一个整数,表示最少区间个数。
 * 输入例子1:
 * 5
 * 1 3 5 6 7
 * 输出例子1:
 * 3
 *
 * @author shijiacheng
 * @date 2018/1/24
 */
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] array = new int[n];
        for (int i = 0; i < n; i++) {
            array[i] = sc.nextInt();
        }

        int count = 1;
        for (int i = 0; i < n; i++) {
            if (i<n-1){
                if (array[i]+1!=array[i+1]){
                    count++;
                }
            }

        }

        System.out.println(count);

    }
}
发表于 2018-01-24 21:44:06 回复(0)
pre 记录前一个数,count 计数,判断是否连续,不连续count++
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int pre = in.nextInt(); // 记录第一个数
        int count = 1;
        for (int i=1; i<n; i++) {
            int num = in.nextInt();
            if (num - pre != 1) { // 不连续
                count++;
            }
            pre = num;
        }
        System.out.println(count);
    }  
}


发表于 2019-12-04 17:48:24 回复(0)
#include <iostream>
using namespace std;
int a[55];
int main() {
   int n;
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>a[i];
    }
    int num=1;
    for(int i=1;i<n;i++) {
        if(a[i]+1!=a[i+1])
            num++;
    }
    cout<<num<<endl;
}


发表于 2018-01-25 09:53:00 回复(0)
function getLeast(number,arr) {
    if(number !== arr.length) {
        return 0
    }
    let sum = 0 
    for(let i = 0; i < number - 1; i++) {
        if(arr[i+1] - arr[i] > 1){
            sum++
        }
    }
    return sum + 1
}
发表于 2021-08-10 10:19:39 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main() {
    int N;
    int i,count,j;
    count=1;
    while (scanf("%d",&N)!=EOF) {
        int A[N];
        for (i=0; i<N; i++) {
            scanf("%d",&A[i]);
        }
        j=A[0];
        i=0;
        while(i<N){
            if (j==A[i]) {
                j++;
                i++;
            }
            else {
                count++;
                j=A[i];
            }
        }
    }
    printf("%d\n",count);
    return 0;
}

编辑于 2024-01-30 16:09:30 回复(0)
发表于 2022-06-07 16:32:27 回复(0)
n=int(input())
a1=input()
a1=a1.split(' ')
a=[]
for num in a1:
    a.append(int(num))
count=1
for i in range(n-1):
    if a[i+1]-a[i]>1:
        count+=1
print(count)
发表于 2021-05-19 20:48:09 回复(0)
这道题只需要存入数组后,遍历n-1个数字,看是否连续,不连续sum = sum+1,最后再返回sum+1就行(因为最后一个元素并没有被遍历到
n = int(input())
arr = list(map(int,input().split()))
sum = 0
for i in range(len(arr)-1):
    if arr[i]+1 != arr[i+1]:
        sum += 1
print(sum+1)

发表于 2021-03-14 12:02:46 回复(0)
import java.util.Scanner;

public class Main{
    
    public static int getSection(int n,int[] Array){
        int index = 0;
        int res = 0;
        
        if(n<=1){
            return res = 1;
        }
        while(index < (n - 1)){
        if((Array[index + 1] - Array[index]) == 1){
            index ++;
        }else{
            res ++;
            index ++;
        }
        }
        return res + 1;
    }
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] array = new int [n];
        for (int i = 0; i < n; i++) {
            array[i] = sc.nextInt();
        }
        int result = getSection(n,array);
        System.out.println(result);
    }
}
发表于 2021-01-01 20:13:46 回复(0)

n = int(input())
arr = []
temp = input()
arr = temp.split(' ')

count = 1
i = 0
while(i<(n-1)):
    if(int(arr[i+1])==(int(arr[i])+1)):
        i +=1
    else:
        count +=1
        i +=1
print(count)


发表于 2020-09-19 18:41:18 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int [] arr = new int[n];
        for(int i = 0; i < n; i++){
            arr[i] = in.nextInt();
        }

        if(n <= 1) System.out.print(n);
        int count = 1;
        for(int i = 1; i < n; i++){
            if(arr[i] > arr[i - 1] + 1)  count++;
        }
        System.out.println(count);
    }
}
发表于 2020-09-12 12:11:04 回复(0)
import java.util.Scanner; public class Main {     public static void main(String[] args) {           Scanner scanner = new Scanner(System.in);           int n = scanner.nextInt();           int num[] = new int[n];           for(int i=0;i<n;i++)               num[i] = scanner.nextInt();           int splitNum=0;           boolean end =false;           for(int i=0;i<n-1;i++)           {               if((num[i]+1)!=num[i+1])                   {                      splitNum++;                      if(i==n-2)                          splitNum++;                   }               else if(i==n-2)                   splitNum++;           }           System.out.println(splitNum);     } }
编辑于 2018-02-11 01:15:56 回复(0)