#include stdiohint main int n = 0; int i = 0; int key_count = 0; scanfd &n; int numn; int Ca100; int key100; for i = 0; i n; i++ scanfd &numi; int buf = numi; int count = 0; whi
在这段代码中,没有明确指定数组的长度,这是不合法的。在C语言中,数组的长度必须是一个常量表达式。
你可以使用动态内存分配来解决这个问题,或者使用一个足够大的数组来存储输入的值。
以下是使用动态内存分配的修复代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 0;
int i = 0;
int key_count = 0;
scanf("%d", &n);
int* num = (int*)malloc(n * sizeof(int));
int* Ca = (int*)malloc(100 * sizeof(int));
int* key = (int*)malloc(100 * sizeof(int));
for (i = 0; i < n; i++) {
scanf("%d", &num[i]);
int buf = num[i];
int count = 0;
while (buf != 1) {
if (buf % 2 == 0) {
buf = buf / 2;
Ca[count] = buf;
count++;
} else {
buf = (3 * buf + 1) / 2;
Ca[count] = buf;
count++;
}
}
int sign = 0; // 重置 sign 的值
for (int j = 0; j < count; j++) {
int compare = Ca[j];
for (int k = 0; k < n; k++) {
if (compare == num[k]) {
sign++;
}
}
}
if (sign == (n - 1)) {
key[key_count] = num[i];
key_count++;
}
}
for (int m = 0; m < key_count; m++) {
printf("%d ", key[m]);
}
free(num);
free(Ca);
free(key);
return 0;
}
请注意,使用动态内存分配后,需要在程序结束时使用free()函数来释放已分配的内存
原文地址: https://www.cveoy.top/t/topic/ijMU 著作权归作者所有。请勿转载和采集!