首先,here is my code只是爲了讓你能夠跟上。C中的數組大小是否有限制?
#include <stdio.h>
#include <stdlib.h>
#define MAX 10000000
long long min(long long a, long long b, long long c) {
long long temp_min = a;
if (b < temp_min) temp_min = b;
if (c < temp_min) temp_min = c;
return temp_min;
}
long long numOp (long long n, long long memo[]) {
memo[1] = 0;
for (int i = 2; i <= n; i++) {
long long guess_1 = MAX, guess_2 = MAX, guess_3 = MAX;
guess_1 = memo[i - 1] + 1;
if (i % 2 == 0) guess_2 = memo[i/2] + 1;
if (i % 3 == 0) guess_3 = memo[i/3] + 1;
memo[i] = min(guess_1, guess_2, guess_3);
}
return memo[n];
}
int main (void) {
// Read the input from the user
long long n, v = 0, N;
scanf ("%lld", &n);
N = n;
long long num_operations[n + 1];
long long sequence[n];
for (long long i = 1; i <= n; i++) {
num_operations[i] = -1;
}
for (long long l = 0; l < n; l++) {
sequence[l] = -1;
}
// Compute the minimum number of operations required to get to n starting form 1
long long op = numOp (n, num_operations);
// Print the result
printf ("%lld\n", op);
sequence[v++] = n;
while (n > 1) {
if (num_operations[n - 1] < num_operations[n]) {
//printf("%lld ", n - 1);
sequence[v++] = n - 1;
n = n - 1;
} else {
long long temp1 = -1,
temp2 = -1;
if (n % 2 == 0) {
temp1 = num_operations[n/2];
}
if (n % 3 == 0) {
temp2 = num_operations[n/3];
}
if (temp2 < temp1) {
//printf("%lld ", n/2);
sequence[v++] = n/2;
n = n/2;
} else {
//printf("%lld ", n/3);
sequence[v++] = n/3;
n = n/3;
}
}
}
// Print the intermediate numbers from 1 up through n
for (long long k = N - 1; k >= 0; k--) {
if (sequence[k] != -1)
printf("%lld ", sequence[k]);
}
printf("\n");
return 0;
}
所以我正在處理這個問題,輸入n使得n介於1和1,000,000之間。該程序在輸入量高達100,000的情況下運行良好,但一旦命中(甚至低於)1,000,000,我就會遇到分段錯誤。
爲了縮小可能性,我調試了程序,發現分段錯誤發生在第52行,我嘗試訪問數組元素。
我唯一的猜測是,對於C語言中的數組有多大可以獲得某種限制,如果是這樣的話,你們是否知道任何方法?
請將此處的代碼,錯誤,樣本數據或文本輸出以純文本的形式發佈,而不是以難以閱讀的圖像的形式發佈,不能複製粘貼以幫助測試代碼或在答案中使用,並且不利於那些使用屏幕閱讀器的人。您可以編輯您的問題以在問題的正文中添加代碼。使用'{}'按鈕來格式化任何代碼塊,或使用四個空格縮進以獲得相同的效果。 – tadman
是:它是42 ... – wildplasser
除了'size_t'的限制外,C沒有限制。有一個由您的操作系統設置的分配限制(32位?64位?ulimit?設置?)。 – tadman