寻找好序列中bn的最小值

题目

给定一个序列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≤10^{9})。

输出

对于每个测试用例,输出一个整数,即所有好序列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;
}

运行结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于Verilog的序列寻找最大最小值的示例代码: ``` module find_min_max ( input clk, input reset, input [7:0] sequence, // 输入序列 output [7:0] min_value, output [7:0] max_value ); reg [7:0] current_value; // 当前值 reg [7:0] min_temp, max_temp; // 最小、最大值的暂存器 // 初始化 initial begin min_temp = 8'hFF; max_temp = 0; end always @(posedge clk) begin if (reset) begin // 复位信号高电平有效 min_temp <= 8'hFF; max_temp <= 0; end else begin current_value <= sequence; // 获取当前输入值 if (current_value < min_temp) begin min_temp <= current_value; //取最小值 end if (current_value > max_temp) begin max_temp <= current_value; //取最大值 end end end assign min_value = min_temp; assign max_value = max_temp; endmodule ``` 该模块的输入包括时钟信号clk、复位信号reset以及一个8位的输入序列sequence。输出包括最小值和最大值。 在该例子,“current_value”表示当前的输入值,最小值和最大值则保存在“min_temp”和“max_temp”寄存器。此外,我们在初始化阶段将最小值暂存器设为0xFF,将最大值暂存器设为0。 当时钟信号发生上升沿时,以下代码块将执行: ```always @(posedge clk) begin if (reset) begin min_temp <= 8'hFF; max_temp <= 0; end else begin current_value <= sequence; if (current_value < min_temp) begin min_temp <= current_value; end if (current_value > max_temp) begin max_temp <= current_value; end end end ``` 在reset信号为高电平(1)时,最小值暂存器被重新设置为0xFF,最大值暂存器被重新设置为0。在reset信号为低电平(0)时,代码将获取当前输入值“current_value”,并检查最大值和最小值。如果当前值比最小值小,最小值将被替换为当前值。如果当前值比最大值大,则最大值将被替换为当前值。 最后,我们使用“assign”语句将输出端口与最小值和最大值寄存器连接起来: ```assign min_value = min_temp; assign max_value = max_temp;``` 这样,当输入序列发生变化时,我们的模块会自动找到最小值和最大值,并将它们输出到min_value和max_value寄存器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值