由题意得,当数组符合题目条件时,1至数组最大值间的所有连续自然数都存在于数组中
因此,将题目化简为
1.寻找数组最大值
2.寻找连续自然数
#include <stdio.h>
int findmax(int arr[], int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max)
max = arr[i];
}
return max;
}//找最大数
int con(int arr[], int n,int max) {
for (int i = 0; i < n; i++) {
if (max == 1)
return 1;
else
{
if (max - arr[i] != 1) {
continue;
}
else
return con(arr, n, arr[i]);
}
}
return 0;
}//寻找连续自然数
int main() {
int m, n;
scanf("%d", &n);
int hp[10001];
for (int i = 0; i < n; i++)
scanf("%d", &hp[i]);
int max = findmax(hp, n);
if (con(hp, n, max))
printf("YES");
else
printf("NO");
return 0;
}