跟踪索引

 收藏

Given the trace program below. I basically need to store a 1 or a 0 to the corresponding a[r[i]] the problem is I need to be able to keep track of the index of vectors zero and one to check the last index that was used for each vector.

For example:
// the values of vector zero and one after reading the file
zero = { 0, 0, 0, 0, 0};
one = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

Four random numbers
2, 4, 16, 12
ave = 14. 50

(2) a[r[i]] < 14.50
      a[r[i]] = zero[0];
(4) a[r[i]] < 14.50
      a[r[i]] = zero[1];
(16) a[r[i]] < 14.50
      a[r[i]] = one[0];
(12) a[r[i]] < 14.50
      a[r[i]] = zero[2];

Four random numbers
15, 36, 48, 45
ave = 35

(15) a[r[i]] < 35
      a[r[i]] = zero[3];
(36) a[r[i]] < 35
      a[r[i]] = one[1];
(48) a[r[i]] < 35
      a[r[i]] = one[2];
(45) a[r[i]] < 35
      a[r[i]] = one[3];

我最初尝试解决问题的方法

int countZero = 0;
int countOne = 0;

for( int i = 0; i < 4; ++i )
{
  if( a[r[i]] < ave )
  {
    if( !one.empty() )
    {
      a[r[i]] = zero[countZero];
      countZero++;
    }
    else
    // if there are no more available values retain the same value
    a[r[i]] = a[r[i]];
  }
  else
  {
    if( !one.empty() )
    {
      a[r[i]] = one[countOne];
      countOne++;
    }
    else
    // if there are no more available values retain the same value
    a[r[i]] = a[r[i]];
  }
    cout << a[r[i]] << " ";
}
 cout << "\n";

上面的代码仅适用于前四个数字。后续的随机数不会替换为1和0,但会保留这些值。

Sample Output:
// correct
2 4 16 12
0 0 1   0

// the values are retained
15 36 48 45
15 36 48 45

// should be 
15 36 48 45
0  1  1   1

关于如何解决此问题的任何提示?

回复
  • bsit 回复

    i0和i1是变量名吗?如果是的话,这意味着我必须对0 []和one []进行计数。

    当然。

  • uin 回复

    已经知道了

  • sit_et 回复

    所以我改变了

    if( counterOne > one.size() )
    if( counterZero > zero.size() )
    

    因为上面的代码给了我分段错误,下面的代码确实解决了分段错误,但是输出仍然是错误的。

    if( counterZero >= zero.size() )
    if( counterOne >= one.size() )
    

    这是输出:

    /* For example
    zero[] = { 0, 0, 0, 0 }
    one[] = { 1, 1, 1, 1 }
    
    */
    
    // this part is correct 
    // ave = 13.94
    // four random numbers from array a[]
    17 16 5 6 
    
    // there values after being compared to the average
    // one[0], one[1], zero[0], zero[1]
    1 1 0 0 
    // new values of array a[]
    20 30 40 27 19 8 10 1 2 9 7 15 4 8 12 1 0 10 15 0 12 3 
    
    // the succeeding is wrong 
    
    // ave = 33.28
    22 48 55 63 
    22 48 55 63 
    // should be zero[2], one[2], one[3], 63
    // 0, 1, 1, 63
    12 13 14 15 22 24 26 28 30 33 36 39 36 40 44 48 45 50 55 54 60 63 
    
    // this part is correct since there are no more available values from one[] 
    // and zero[]
    
    // ave = 35.17
    54 50 24 26 
    54 50 24 26 
    36 45 54 63 30 40 50 60 22 23 44 55 12 24 36 48 13 26 39 14 28 15 
    
    
    // ave = 128.17
    108 110 132 130 
    108 110 132 130 
    108 117 126 135 110 120 130 140 110 121 132 143 108 120 132 144 117 130 143 126 140 135 
    

  • 唱征服 回复

    “无效”是什么意思?细节。

  • liste 回复

    关于如何解决此问题的任何提示?

    没有更好的描述。没有解释r包含什么。 您没有告诉我们,但似乎包含您的4个随机数。 索引为零和一-只是猜测吗?选择这些数字有什么原因吗?

    在任何人都可以尝试提供建议之前,您确实需要充分解释。

  • 9527 回复

    没有解释r包含什么您没有告诉我们,但是a似乎包含您的4个随机数。

    数组r [4]包含四个0-21随机数,并用作a []的索引。我只需要访问四个随机数 从a []并将值替换为1或0。

    索引为零和一-只是猜测吗?选择这些数字有什么原因吗?

    将每四个随机数与平均 如果随机数

    例:

    (2) a[r[i]] < 14.50
          a[r[i]] = zero[0];
    (4) a[r[i]] < 14.50
          a[r[i]] = zero[1];
    (16) a[r[i]] < 14.50
          a[r[i]] = one[0];
    (12) a[r[i]] < 14.50
          a[r[i]] = zero[2];
    
    /* 
     so for the next value of 
      a[r[i]] if its < ave 
        a[r[i]] = zero[3] // last use index was 2
      else
        a[r[i]] = one[1] // last use index was 0
    */
    

  • wqui 回复

    a[r[i]] = zero[i0++];
    a[r[i]] = one [i1++];
    

    另外,至少要考虑NathanOliver所说的话。

  • 不要离开我 回复

    如果仅基于数组的值高于或低于平均值,则将数组的值设置为1或0。您不要使用全1或全0的数组来做到这一点。

  • lsint 回复

    如果仅基于数组的值是高于还是低于平均值,则将数组的值设置为1或0。

    如果真是这样,将会很容易,但是不幸的是,事实并非如此。并非所有值都将替换为1或0,这取决于我从文件中读取的1和0的数目。

    例如: 从随机数来看,有5个值小于平均值,但我从文件中读取的0仅为2。然后,这意味着将5个随机数中的前两个值替换为0,其余的值相同。

    零[i0 ++];一个[i1 ++];

    i0和i1是变量名吗?如果是的话,这意味着我必须对0 []和one []进行计数。

  • 透心凉 回复

    到目前为止,这是我尝试过的操作,我有两个用于one []和zero []的计数器。不幸的是它不起作用

    int counterZero = 0;
    int counterOne = 0;
    
    for( int i = 0; i < 4; ++i )
    {
     if( a[r[i]] < ave )
     {
       // check if counterZero goes beyond the size of the zero[]
       // if so retain the same number
       if( counterZero > zero.size() )
          a[r[i]] = a[r[i]];  
       else
       {
         a[r[i]] = zero[counterZero];
         counterZero++;  
       }
     }
     else
     {
       // check if counterOne goes beyond the size of the one[] 
       // if so retain the same number
       if( counterOne > one.size() )
         a[r[i]] = a[r[i]];  
       else
       {
         a[r[i]] = one[counterOne];
         counterOne++;  
        }
    }
      cout << a[r[i]] << " ";
    }
    cout << "\n";