题目描述:给定一个数组,找出能使左右两边值之和相等的坐标。例如给定数组[1,2,3,4,5,1,2,3,4],则数组中心下标为5。给定数组[2,4,2,5,6,4,2,2,5],数组中心下标为5。给定数组[1],则中心下标为1(左右都为0)
思路:计算出数组总和sum。
1.中心下标的左边等于右边:为了便于编程和计算,在计算左边和右边时将中心下标本身的值也加进去。左右加同样的值,还是相等。
2.因为左边等于右边,则左边或者右边的两倍加上中心下标的值等于数组总和。注意这里左边或者右边是不带中心下标的值的,注意和上面的方法进行区分。
代码如下,cal1是方法1,cal2方法2:
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 20
typedef struct{
int *nums;
int length;
int max_length;
}Nums,*PNums;
void init(PNums);
void input(PNums);
int cal1(PNums);
int cal2(PNums);
int main(void){
Nums nums_array;
PNums p = &nums_array;
init(p);
input(p)