区间表达
题目描述
牛牛的老师给出了一个区间的定义:
对于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
1 \leq n \leq 50
1≤n≤50 ),
第二行n
个整数a[i]
(
1
≤
a
[
i
]
≤
50
1 \leq a[i] \leq 50
1≤a[i]≤50 ),表示牛牛的序列,保证序列是递增的。
输出描述
输出一个整数,表示最少区间个数。
示例一
输入
5
1 3 5 6 7
输出
3
说明
参考解题 C
#include <stdio.h>
int main()
{
int i,n,a[50],flg=1,x;
scanf("%d",&n);
for(i=0;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
if(a[i]!=a[i-1]+1) flg++;
}
printf("%d",flg);
}
参考解题 C++
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int number;
cin>>number;
if(number <= 0)
{
cout<<0;
return 0;
}
int temp = 0;
vector<int> range;
int rangecount = 1;
for(int i = 0; i < number; ++i)
{
cin >> temp;
if(!range.empty())
if(temp != range.back()+1)
rangecount++;
range.push_back(temp);
}
cout<<rangecount;
return 0;
}
参考解题 Java
import java.util.*;
import java.io.*;
public class Main{
public static void main(String args[]) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
int count = 1;
String[] str = bf.readLine().split(" ");
int pre = Integer.parseInt(str[0]);
for(int i=1;i<n;i++){
if(Integer.parseInt(str[i-1]) != Integer.parseInt(str[i])-1) count++;
}
System.out.println(count);
}
}
参考解题 Python
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)