用C语言判断一个数组中是否恰有1到n
时间: 2024-11-25 22:18:24 浏览: 0
C语言 数组中重复的数字分析及方法
在C语言中,判断一个数组中是否恰好包含从1到n的所有整数可以使用排序算法和范围检查的方式。以下是一种基本的方法:
1. 首先,创建一个包含1到n的临时数组或者使用循环生成这个序列。
2. 排序这两个数组。由于原数组如果有1到n,那么排序后的数组也应该是一个单调递增的序列。
3. 比较两个排序后的数组。如果它们完全相同,说明原数组包含了从1到n的所有数字,否则就不满足条件。
下面是一个简单的示例函数来实现这个功能(假设数组`arr[]`已存在,长度为`size`):
```c
#include <stdio.h>
#include <stdlib.h>
// 使用冒泡排序对数组进行排序
void sort(int arr[], int size) {
for (int i = 0; i < size - 1; ++i) {
for (int j = 0; j < size - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 判断数组是否包含1到n
int containsRange(int arr[], int size, int n) {
int sortedArr[size]; // 用于存储1到n
for (int i = 1; i <= n; ++i)
sortedArr[i - 1] = i;
sort(arr, size);
sort(sortedArr, n); // 只需要对较小的数组排序
for (int i = 0; i < size && i < n; ++i) {
if (arr[i] != sortedArr[i])
return 0; // 如果找到不匹配的元素,返回0表示不满足条件
}
return size == n; // 如果遍历完所有元素且大小相等,说明原数组包含1到n
}
int main() {
int arr[] = {1, 2, 3, 5, 6, 7, 8};
int size = sizeof(arr) / sizeof(arr[0]);
int n = 8;
if (containsRange(arr, size, n))
printf("Array has all numbers from 1 to %d\n", n);
else
printf("Array does not have all numbers from 1 to %d\n", n);
return 0;
}
```
阅读全文