c语言如何把一个数组里的连续元素之和存进另一个数组?

比如a[4]=1,4,5,6。要把1+4,1+4+5,1+4+5+6,4+5,4+5+6,5+6存进b[n]中。1+5+6这种不连续的就去掉... 比如a[4]=1,4,5,6。要把1+4,1+4+5,1+4+5+6,4+5,4+5+6,5+6存进b[n]中。1+5+6这种不连续的就去掉 展开
 我来答
野人马
2020-05-04 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:147
采纳率:43%
帮助的人:66万
展开全部

#include<stdio.h>

int main(){

int n=4;   //初始数组长度

int a[4]={1,4,5,6}; //因为没有输入,这个测试用的

int b[1000],bi=0,sbi=a[0];//bi,记录b产生数据的长度,sbi是临时变量

for(int i=1;i<n;i++){    //累加从1到未尾

sbi+=a[i];

b[bi++]=sbi;//每加一个数就记录到b  中,bi长度加1

}

for(int i=1;i<n-1;i++){//再从两边往中间累加

sbi=a[i]; 

for(int j=i+1;j<n;j++){

if(i!=j){

sbi+=a[j];

b[bi++]=sbi;

}

}

}

for(int i=0;i<bi;i++){

printf("%d ",b[i]);

}

return 0;

追问
这个算法有名字吗,能简单说说原理吗
追答
这个应该算是累加和的枚举方法吧,临时想出来的
AStoryForever
2020-05-04 · TA获得超过2813个赞
知道大有可为答主
回答量:1240
采纳率:87%
帮助的人:943万
展开全部
用的是JAVA,但是C语言和JAVA相似度很高,思路是一致的。
这种要利用锚定法,简要来说就是先定好两个数,然后再从头数累加到尾数就可以
int k=0,anchor=0;
int a[]= {1,4,5,6};
int b[]=new int [a.length*(a.length-1)/2];/*对于n个数按题目方式求和,容易知道是n-1+n-2+...1个,即等差数列求和**/
for(int i=0;i<b.length;i++)b[i]=0;/*先将b全部初始化为0,这样才能后续累加**/
for(int i=0;i<a.length-1;i++)
{

for(int j=i+1;j<a.length;j++,k++)/*定好a[i]和a[j]两个数,然后利用anchor初始从i出发累加到j即可**/
{
anchor=i;/*每次j移动,anchor都必须回到原i值**/
while(anchor!=j+1)
{
b[k]+=a[anchor++];
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式