用C语言写这道题:题目描述 给定一个长度为 n 的整数数组 a ,数组中所有数字的绝对值都在 0 ~ n - 1 的范围内。 数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中所有重复的数字。 输入 输入包含两行 第一行输入一个整数 n ( 1 ≤ n ≤ 1000000 ) 。 第二行输入由空格分隔的 n 个数, a1,a2,a3,...,an ( 0 ≤ |ai| ≤ n - 1 ) 。 输出 按从小到大的顺序输出数组中所有的重复数字,如果数组中有某些数字不在 0 ~ n - 1 的范围内,或者没有重复的数字,则输出 -1 。 样例输入 8 2 3 5 4 3 2 6 7 样例输出 2 3
时间: 2023-02-20 11:51:21 浏览: 234
以下是一个可行的 C 语言代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000000
int a[MAX_N];
int main() {
int n, i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
if (a[i] < 0 || a[i] >= n) {
printf("-1\n");
return 0;
}
}
for (i = 0; i < n; i++) {
while (a[i] != i) {
if (a[i] == a[a[i]]) {
printf("%d ", a[i]);
break;
}
int t = a[i];
a[i] = a[t];
a[t] = t;
}
}
printf("\n");
return 0;
}
```
阅读全文