1.题目的解释:给定一个整数数组nums,请编写一个能够返回数组“中心下标”的方法。
中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在,返回-1。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。
2.算法思想
/*********************************
算法的思想
1.先把数组元素的值都加一下 变成 sum
2.然后建立一个变量 zong=0 。
3.从0 开始循环 到最后一个 ,中间开始加上数组的值,然后与sum 的值对比。 不相同的话,减去数组的值(看代码 很简单)
// 左边 的总值 + s[n] = s[n] + 右边的总值 //
*********************************/
代码:
/*************************************************
作者:she001
时间:2022/8/20
内容: 解决 一给定一个整数数组nums,请编写一个能够返回数组“中心下标”的方法。
中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在,返回-1。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。
1.伪算法
***************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<stdbool.h>
#include<string.h>
/*********************************
算法的思想
1.先把数组元素的值都加一下
2.然后建立一个变量 zong=0 。
3.从0 开始循环 到最后一个 ,中间开始加上数组的值,然后与sum 的值对比。 不相同的话,减去数组的值(看代码 很简单)
*********************************/
int select_num(int s[],int a)//s 为数组 ,a 为数组的长度
{
int sum=0;
for(int i=0;i<a;++i)//计算数组相加的总值
{
sum+=s[i];
}
接下来是是算法 左边 的总值 + s[n] = s[n] + 右边的总值
int zong=0;
for(int j=0;j<a;j++)
{
zong +=s[j];
if(zong==sum)
{
return j;
}
sum-=s[j];
}
return -1; //没有中心的坐标是返回 -1
}
int main()
{
int s[10]={1,7,3,6,5,6,0};
int a=select_num(s,7);
printf("a=%d\n",a);
return 0;
}