#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int max_b(int,int);
int max(int[],int);
int main(){
int num_tests;
scanf("%d",&num_tests);
int array_n[num_tests];
int array_b[num_tests];
int i,j;
for (i=0;i<num_tests;i++){
scanf("%d %d",&array_n[i],&array_b[i]);
}
for (j=0;j<num_tests;j++){
int A = 1;
int N = array_n[j];
int B = array_b[j];
int max_num_b;
max_num_b = max_b(N,B);
int array2[max_num_b];
int k;
for (k=0;k<max_num_b;k++){
int num_a,num_b;
num_a = N-(k+1)*B;
num_b = k+1;
array2[k] = num_a*num_b;
}
printf("%d\n",max(array2,max_num_b));
}
}
int max(int array[],int a){
int max_num = 0,i;
for (i=0;i<a;i++){
if (array[i] > max_num){
max_num = array[i];
}
}
return max_num;
}
int max_b(int n,int b){
return n/b;
}
我的第一个输入是测试用例数量 T(比如说 1),第二个输入是 1,000,000,000 1 。因此,代码试图形成一个 10^9 大小的数组,程序最终显示段错误。然而代码运行良好高达 1,000,000 1. 我怎样才能存储多达 10^9 个元素。如果不可能,那么我怎么能存储这么多数字。 我应该使用 malloc,如果是,那么如何。任何帮助将不胜感激。
最佳答案
您根本不需要存储这些数据。只需即时处理即可。
据我所知,以下代码产生与您发布的代码相同的结果,但不使用任何数组。
#include <stdio.h>
int main() {
int k, t, N, B, max, num_tests;
scanf("%d", &num_tests);
while (num_tests--) {
scanf("%d %d", &N, &B);
for (k=N/B,max=0; k>0; k--) {
t = (N-k*B) * k;
if (t > max) max = t;
}
printf("%d\n", max);
}
return 0;
}
关于c - 如何存储多达 1,000,000,000 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45077642/