题目
给定一个序列a1,a2,…,an。如果一个序列b1,b2,…,bn满足以下条件,则称其为好序列:
- bi是正整数,对于i=1,2,…,n;
- bi≠ai,对于i=1,2,…,n;
- b1<b2<…<bn。
找出所有好序列b1,b2,…,bn,中bn的最小值。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量t(1≤t≤100)。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数n(1≤n≤100)。
每个测试用例的第二行包含n个整数a1,a2,…,an(1≤ai≤)。
输出
对于每个测试用例,输出一个整数,即所有好序列b中bn的最小值。
示例
输入
3
5
1 3 2 6 7
4
2 3 4 5
1
1
输出
8
4
2
注意
在第一个测试用例中,b=[2,4,5,7,8] 是一个好序列。可以证明不存在满足b5<8的好序列b�。
在第二个测试用例中,b=[1,2,3,4] 是一个最优的好序列。
在第三个测试用例中,b=[2] 是一个最优的好序列。
C程序源码1
#include <stdio.h>
int main() {
int t;
scanf("%d", &t);
for (int ti = 0; ti < t; ti += 1) {
int n;
scanf("%d", &n);
int b = 0;
for (int i = 0, a; i < n; i += 1) {
scanf("%d", &a);
b += 1;
b += a == b;
}
printf("%d\n", b);
}
return 0;
}
运行结果
C程序源码2
#include<stdio.h>
int main(){
int m,n,k,c[10];
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&n);
int a[n],b[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(int i=0,k=1;i<n;i++){
b[i]=k;
if(b[i]==a[i]){
k++;
b[i]=k;
}
k++;
}
c[i]=b[n-1];
}
for(int i=0;i<m;i++){
printf("%d\n",c[i]);
}
return 0;
}