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这种不连续的就去掉
展开
展开全部
#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;
}
追问
这个算法有名字吗,能简单说说原理吗
追答
这个应该算是累加和的枚举方法吧,临时想出来的
展开全部
用的是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++];
}
}
}
这种要利用锚定法,简要来说就是先定好两个数,然后再从头数累加到尾数就可以
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++];
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询