用途
假如一个数组,需要大量去查询他的前n项和、x–y项的和,这样可以先列出所有数组和,查询时候不用每次遍历,节省时间。
方法有两种,第一种是二维数组,第二种一维数组。
第一种方法
如图是第一种方法所建表示意图,这样算出了任意两个之间的和,只需调用一次即可。
第二种方法
若查询x—y之间的和,需要查询后求差值。
比较
一般而言,方法二更好。
但若查询量非常巨大,采用第一种。
代码
#include <iostream>
using namespace std;
int Random_array(int* a, int n)
{
srand((unsigned int)time(NULL));
for (int i = 0; i < n; i++)
a[i] = rand() % 100;
return *a;
}
void Print_array(int* a, int n)
{
for (int i = 0; i < n; i++)
printf("%d ,", a[i]);
printf("\n");
}
int* Sub_Array_Sum(int* a, int n)
{
int* b = new int[n];
int sum = 0;
for (int i = 0; i < n; i++)
{
sum += a[i];
b[i] = sum;
}
return b;
}
int main()
{
int a[10] = {};
Random_array(a, 10);
Print_array(a, 10);
int* b = Sub_Array_Sum(a, 10);
Print_array(b, 10);
int num = 0;
printf("求前x个的和,请输入x=");
scanf_s("%d", &num);
printf("前%d个的和为:%d", num, b[num - 1]);
int x = 0, y = 0;
printf("\n求x--y的和,请输入x与y");
cin >> x >> y;
printf("%d到%d的和为:%d", x, y, b[y] - b[x - 1]);//此处偷懒了,应该判断x是否为0
return 0;
}