作业帮 > 综合 > 作业

noip 2012 初赛 阅读程序三,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/06/06 06:32:35
noip 2012 初赛 阅读程序三,
3.#include
using namespace std;
const int SIZE=20;
int data[SIZE];
int n,i,h,ans;
void merge()
{
data[h-1]=data[h-1]+data[h];
h--;
ans++;
}
int main()
{
cin>>n;
h=1;
data[h]=1;
ans=0;
for(i=2;i1&&data[h]==data[h-1])
merge();
}
cout
n值 数组有效元素(包括转换前和转换后)
i=2 1,1->2
i=3 2,1
i=4 2,1,1->2,2->4
i=5 4,1
i=6 4,1,1->4,2
i=7 4,2,1
i=8 4,2,1,1->4,2,2->4,4->8
至此次转换次数(->)为7次,即ans=7
i=9 8,1
i=10 8,1,1->8,2
i=11 8,2,1
i=12 8,2,1,1->8,2,2->8,4
i=13 8,4,1
i=14 8,4,1,1->8,4,2
i=15 8,4,2,1
i=16 8,4,2,1,1->8,4,2,2->8,4,4->8,8->16
由上可知,数组有效元素的和为n,当n可以表示为2(x)时,转换次数为2(0)+2(1)+2(2)+2(3)+...+2(x-1)
当i从1变到1024时,转换次数为2(0)+...+2(9)=1023
当i从1变到2048时,转换次数为2(0)+...+2(10)=2047,但是i变不到2048,只变到2012(n的值)
所以,最终数组的有效元素是:
i=2012\x091024,512,256,128,64,16,8,4\x09//有效数组元素的和为2012
所以,当n=2012时,最终的结果是:
\x09t(1024)+t(512)+t(256)+t(128)+t(64)+t(16)+t(8)+t(4)\x09//t(x)表示从数组初始状态变到x状态
\x09=1023+511+255+127+63+15+7+3=2004