标题:C++ 求助 关于结构数组 [ C++ 语言]
取消只看楼主
Lauibo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-9-30
结帖率:0
已结贴  问题点数:20 回复次数:0 
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
搜索更多相关主题的帖子: power for i++ cout 当前 
2017-09-30 03:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481048-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016786 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved