1、代码如下:
#include<iostream.h>
int main()
{
int S,n,m,i,j;
for(j=1;j<381;j++){
n=j;
for(i=1,S=0;i<8;i++,n*=2)S=S+n;
if(S==381){
cout<<n/2<<endl;;
m=j;
break;
}
}
for(i=1,n=m,S=0;i<8;i++,n*=2)if(n==48)cout<<i<<endl;
}

2、运行结果:

1、首先我们并不知道第一层有多少个,因此我们要用穷举法从1开始尝试:
如图:

2、然后在在符合条件时输出最底层:
for(i=1,S=0;i<8;i++,n*=2)S=S+n;
if(S==381){
cout<<n/2<<endl;;
m=j;
break;
这里除以2是由于循环语句中n自乘了2

3、把第一层的个数记录在m中,然后再找出48对应的层数,并输出:
for(i=1,n=m,S=0;i<8;i++,n*=2)if(n==48)cout<<i<<endl;
