如 int a = [2,4,5,8,10,11,13];
连续数字段有5段:
2
4,5
8
10,11
13
每段最小的数字分别是:2 ,4,8,10,13
#include <stdio.h>
#include <math.h>
#include <string.h>
int GetMinVal(int a[], int n)
{
int min_value = a[0];
// 遍历数组
int i = 0;
for ( i = 1; i < n; i++) {
// printf("%d",a[i]);
if (a[i] < min_value) {
// 如果当前元素小于最小值,则更新最小值
min_value = a[i];
}
}
// 输出最小值
//printf("min val: %d\n", min_value);
return min_value;
}
void GetCountMinVal(int *a,int n,int *minVal)
{
int tempa[16];
tempa[0] = a[0];
int i = 0;
int j = 0;
int k = 0;
int len = 1;
for ( i = 0; i <= n-1; i++)
{
if (a[i+1] == a[i] + 1)
{
tempa[k] = a[i]; // 当前数字与前一个数字连续
k++;
len++;
if(i+1 == n-1)
{
tempa[k] = a[i+1]; //连续的最后一个数压入栈
}
}
else
{
// 当前数字与前一个数字不连续,说明前一个数字是连续数字段的最小值
if (len == 1)
{
tempa[k] = a[i]; //连续字段只有一个数的情况
}
minVal[j]= GetMinVal(tempa, len);
len = 1;
printf("minVal= %d\n",minVal[j]);
j++;
k = 0;
}
}
}
int main() {
// int a[] = {2, 4, 5, 8,10,11,13};
int a[] = {2, 3, 5, 8,10,11,13,14};
int tempa[16];
tempa[0] = a[0];
int minVal[16] = {0};
int n = sizeof(a) / sizeof(a[0]);
int i = 0;
int j = 0;
int k = 0;
int len = 1;
GetCountMinVal(a,n,minVal);
return 0;
}