我想出了一个算法,我想问一些问题。有没有办法在数组中设置一系列值?
例如
int N = 10;
int array[N] = {2,6,5,9,4,3,5,9,4,9};
并使用循环来增加每次传递的起始值。
for (int A = 1; A < N - 2; A++) {
for (int B = 1; B < N - 1; B++) {
int ProfitA = Sum(array[0...A-1]);
int ProfitB = Sum(array[A...A+B-1]);
int ProfitC = Sum(array[A+B...N-1]);
}
}
那么有没有办法使用上面的C -pseudocode设置每个数组的值范围?
答案 0 :(得分:2)
不,C没有内置这样的功能。此外,一旦将数据传递给函数(所谓的“衰减到指针”),就没有获得数组上边界的功能。
此问题有两种标准解决方案:
第一种方法如下:
int sum_array(int* array, size_t len) {
int res = 0;
for (size_t i = 0 ; i != len ; i++) {
res += array[i];
}
return res;
}
...
int ProfitA = sum_array(array, A);
int ProfitB = sum_array(array+A, B);
int ProfitC = sum_array(array+A+B, N-A-B);
第二种方法看起来像这样:
int sum_array(int* array, int first, int last) {
int res = 0;
for (int i = first ; i <= last ; i++) {
res += array[i];
}
return res;
}
...
int ProfitA = sum_array(array, 0, A-1);
int ProfitB = sum_array(array, A, A+B-1);
int ProfitC = sum_array(array, A+B, N-1);
答案 1 :(得分:1)
没有办法使用你用来描述你所追求的语法风格。
两种显而易见的方法是提供数组和索引范围(如提到的那样)或使用两个指针指定范围
int ProfitB = Sum(array + A, array + A+B-1); /* sum array[A] ... array[A+B-1] */
无论您使用哪种方法,您的调用代码都需要确保它提供有效范围。