C++ 求助 关于结构数组 [ C++ 语言]
我发现 当我编辑其他analyze[i].apower[j]的值时,analyze[0].apower[j] analyze[1].apower[j]的值会自动改变动态数组的值会自动改变吗???
(这种情况不会每次都发生,是不是会来一次,需要多测几次)
以下是代码和一次运算的结果(中间跳过了一些行,关键部分已标出)
为什么我在处理i=2 的情况,依然改变了i=0时的值
ps 这个程序大致目标是把一个数拆成2的幂
#include <iostream>
#include<cstdlib>
#include<ctime>
#include<cmath>
#define RAND_MAX INT_MAX
using namespace std;
int main()
{
int nbheap,i,j,nb0,nbrm,numheap,limt,k;
cin>>nbheap;
int* heap=new int [nbheap];
nb0=0;
srand(time(NULL));
//cin>>limt;
for (i=0;i<nbheap;i++)
heap[i]=rand()%100+1;
for (i=0;i<nbheap;i++) cout<<i+1<<":"<<heap[i]<<" ";
for (i=0;i<nbheap;i++) if (heap[i]==0) nb0++;
cout<<"\n";
int biggest=heap[0];
for (i=1;i<nbheap;i++) if (heap[i]>biggest) biggest=heap[i];
int power,max_1=0;
i=0;
while (1==1)
{
if ((biggest>=pow(2,i))&&(biggest<pow(2,i+1))) break;
else i++;
}
cout<<biggest<<endl;
max_1=i;
cout<<max_1<<endl;
struct structure
{
int num,num1;
int max_index=0;
int* apower=new int[max_index+1];
};
int* powertotal=new int[max_1+1];
structure* analyze=new structure[nbheap];
for (i=0;i<nbheap;i++) analyze[i].max_index=max_1;
for (i=0;i<nbheap;i++) analyze[i].num=heap[i];
for (i=0;i<nbheap;i++) analyze[i].num1=heap[i];
for (i=0;i<nbheap;i++)
for (j=0;j<max_1+1;j++)
analyze[i].apower[j]=0;
for (i=0;i<nbheap;i++)
{
cout<<"i="<<i<<" 当前:"<<analyze[i].num1<<endl;
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[i].apower[j]<<" ";
cout<<"\n";
}
power=0;
for (i=0;i<max_1+1;i++) powertotal[i]=0;
for (i=0;i<nbheap;i++)
{
while (analyze[i].num1!=0)
{
cout<<"总: i="<<i<<" 当前:"<<analyze[i].num1<<" power="<<power<<" "<<endl;
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[0].apower[j]<<" ";
cout<<"\n";
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[1].apower[j]<<" ";
cout<<"\n";
cout<<"\n";
if (analyze[i].num1>=pow(2,power)&&analyze[i].num1<pow(2,power+1))
{
cout<<"if: ";
cout<<"i="<<i<<" 当前:"<<analyze[i].num1<<" power="<<power<<" "<<endl;
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[0].apower[j]<<" ";
cout<<"\n";
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[1].apower[j]<<" ";
cout<<"\n";
analyze[i].apower[power]++;
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[0].apower[j]<<" ";
cout<<"\n";
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[1].apower[j]<<" ";
cout<<"\n";
analyze[i].num1=analyze[i].num1-pow(2,power);
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[0].apower[j]<<" ";
cout<<"\n";
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[1].apower[j]<<" ";
cout<<"\n";
powertotal[power]=powertotal[power]+1;
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[0].apower[j]<<" ";
cout<<"\n";
cout<<"\n";
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[1].apower[j]<<" ";
cout<<"\n";
cout<<"\n";
power=0;
}
else
{
cout<<"else: ";
power++;
cout<<"i="<<i<<" 当前:"<<analyze[i].num1<<" power="<<power<<" "<<endl;
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[0].apower[j]<<" ";
cout<<"\n";
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[1].apower[j]<<" ";
cout<<"\n";
cout<<"\n";
}
}
}
for (i=0;i<max_1+1;i++)
cout<<"2^"<<i<<":"<<powertotal[i]<<" ";
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
for (i=0;i<nbheap;i++)
{
cout<<analyze[i].num<<": ";
for (j=0;j<max_1+1;j++)
cout<<"2^"<<j<<":"<<analyze[i].apower[j]<<" ";
cout<<"\n";
return 0;
}
5
1:38 2:17 3:10 4:9 5:10
38
5
总: i=0 当前:38 power=2
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
else: i=0 当前:38 power=3
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:38 power=3
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
else: i=0 当前:38 power=4
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:38 power=4
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
else: i=0 当前:38 power=5
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:38 power=5
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
if: i=0 当前:38 power=5
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:6 power=0
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
else: i=0 当前:6 power=1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:6 power=1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
else: i=0 当前:6 power=2
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:6 power=2
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
if: i=0 当前:6 power=2
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:0 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:2 power=0
2^0:0 2^1:0 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
else: i=0 当前:2 power=1
2^0:0 2^1:0 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=0 当前:2 power=1
2^0:0 2^1:0 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
if: i=0 当前:2 power=1
2^0:0 2^1:0 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
总: i=1 当前:17 power=0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
else: i=1 当前:17 power=1
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:1
2^0:0 2^1:0 2^2:0 2^3:0 2^4:0 2^5:0
if: i=2 当前:2 power=1
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:1
2^0:1 2^1:0 2^2:0 2^3:0 2^4:1 2^5:0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:2
2^0:1 2^1:0 2^2:0 2^3:0 2^4:1 2^5:0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:2
2^0:1 2^1:0 2^2:0 2^3:0 2^4:1 2^5:0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:2
2^0:1 2^1:0 2^2:0 2^3:0 2^4:1 2^5:0
总: i=3 当前:9 power=0
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:2
2^0:1 2^1:0 2^2:0 2^3:0 2^4:1 2^5:0
else: i=3 当前:9 power=1
2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:2
2^0:1 2^1:0 2^2:0 2^3:0 2^4:1 2^5:0
38: 2^0:0 2^1:1 2^2:1 2^3:0 2^4:0 2^5:2
17: 2^0:1 2^1:0 2^2:0 2^3:0 2^4:1 2^5:0
10: 2^0:0 2^1:2 2^2:0 2^3:1 2^4:0 2^5:0
9: 2^0:1 2^1:0 2^2:0 2^3:1 2^4:0 2^5:1
10: 2^0:0 2^1:1 2^2:0 2^3:1 2^4:0 2^5:0