# 跟踪索引

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";
``````

``````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";
``````