水题,直接贴代码。
//poj 3444
//sep9
#include <iostream>
using namespace std;
const int maxN=260;
int a[maxN],b[maxN];
int main()
{
int i,n,m;
while(scanf("%d",&n)==1&&n){
for(i=1;i<=n;++i)
scanf("%d",&a[i]);
m=1;
while(m<=n/2){
for(i=1;i<=m;++i){
b[2*i-1]=(a[i]+a[i+m])/2;
b[2*i]=(a[i]-a[i+m])/2;
}
for(i=1;i<=2*m;++i)
a[i]=b[i];
m*=2;
}
for(i=1;i<=n;++i)
printf("%d ",a[i]);
printf("\n");
}
return 0;
}
本文提供了一个解决POJ3444问题的简洁代码实现方案,通过不断将数组进行拆分与重组,最终得到题目所求的答案。代码采用C++编写,适用于初学者学习递归思想和数组操作。
633

被折叠的 条评论
为什么被折叠?



