昨天看到这道题没思路,今天又令我纠结了半天的问题啊!!!开始还理解错了,有木有!!
下面是代码:
#include<stdio.h>
#include<math.h>
int s[9][130],d[9][130],b[260];//s存储和,d存储差
int power(int n)//求2的n次方的函数
{
if(n==0)
return 1;
else
return (2*power(n-1));
}
int main()
{
int num,n,count,i,j,k,t,q;
while(scanf("%d",&num)!=EOF && num)
{
for(i=1;i<=num;i++)//读入数据
scanf("%d",&b[i]);
d[0][1]=b[2];
j=0;
t=3;
n=num;
count=0;
while(num/2!=0)//计算需要循环的次数
{
count++;
num=num/2;
}
for(i=1;i<count;i++)//将差存到d二维数组里
{
q=1;
for(k=t;k<=power(j+2);k++)
d[i][q++]=b[k];
t=k;
j++;
}
s[0][1]=b[1];
j=0;
while(count--)//核心内容
{
k=1;
for(i=1;i<=power(j);i++)
{
s[j+1][k]=(s[j][i]+d[j][i])/2;
s[j+1][k+1]=(s[j][i]-d[j][i])/2;
k+=2;
}
j++;
}
printf("%d",s[j][1]);//输出注意空格问题
for(i=2;i<=n;i++)
printf(" %d",s[j][i]);
printf("\n");
}
return 0;
}