用c语言:锯齿是由严格的高低不同的刀片组成,而锯齿数组指的是数组中的相邻元素一高一低严格不同。一个元素和两个不同的元素是齿数较少的锯齿数组,因空集属于任何子集,我们规定,空数组也是锯齿数组。如{2,30,5,7}是锯齿数组,而{2,2,30,8,5,7}不是锯齿数组,但是却有长度为3的子锯齿数组{2,30,8}。编写程序,对输入的整数数组,计算其中包括的最长子锯齿数组的长度。 输入样例1: 第一行,数组长度N,第二行是空格分隔的N个整数。 9 18 45 30 50 10 17 8 25 19 输出样例1: 输出构成的最长的锯齿数组(本例中数据就是锯齿数组,故长度就是9)。 9 输入样例2: 13 18 19 20 45 30 50 10 17 10 9 8 25 19 输出样例2: 输出构成的最长的锯齿数组长度(本例中:20 45 30 50 10 17 10是锯齿数组,故长度是7)。 7 输入样例3: 4 19 19 9 9 输出样例3: 输出构成的最长的子锯齿数组长。 2
时间: 2023-06-12 10:04:43 浏览: 143
C语言中的数组(详解)
```c
#include <stdio.h>
int main() {
int n;
scanf("%d", &n); // 输入数组长度
int a[n], dp[n]; // a 数组存放输入的整数,dp 数组存放以 a[i] 结尾的最长子锯齿数组长度
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]); // 输入整数
dp[i] = 1; // 初始化 dp 数组
}
// 计算 dp 数组
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if ((a[i] > a[j] && (i - j) % 2 == 1) || (a[i] < a[j] && (i - j) % 2 == 0)) {
dp[i] = dp[i] > dp[j] + 1 ? dp[i] : dp[j] + 1;
}
}
}
// 找到 dp 数组中的最大值
int max = 0;
for (int i = 0; i < n; i++) {
max = max > dp[i] ? max : dp[i];
}
printf("%d", max); // 输出最长子锯齿数组长度
return 0;
}
```
阅读全文