我正尝试在我感兴趣的编程问题中用c ++进行重复检查。简而言之,它提示用户输入一个大于等于0且小于等于输入数字的数字。用户决定。 该程序工作时,应该返回重复的数字,但是当我测试它时,它只会打印出随机的字母字符串。
int arrCheck;
for(arrCheck=0; arrCheck<=arrLimit-1; arrCheck++)
{
if(arr[abs(checkarr[arrCheck])]>=0)
{
arr[abs(checkarr[arrCheck])]=-arr[abs(checkarr[arrCheck])];
}
else
{
cout<<arr[arrCheck]+" "<<endl ;
}
}
ArrLimit是用户决定的数量限制。数组checkArr []中的数字比其arr []对应的数字大一。
为澄清起见,在n个数字的数组中只能用0到n-1(含)之间的数字填充的想法是问题的一部分。
更新:下面的所有内容是上面的代码部分之前的代码行。
int main()
{
cout<<"How many numbers do you want?";
int arrLimit;
cin>>arrLimit;
int arr[arrLimit-1];
int checkarr[arrLimit-1];
int arrValue;
int arrLoop=0;
while(arrLoop<=arrLimit-1)
{
cout<<"Insert numbers (non negative integers only)";
cin>>arrValue;
if(arrValue<=arrLimit-1)
{
arr[arrLoop]=arrValue;
checkarr[arrLoop]=arrValue+1;
}
else
{
cout<<"Invalid, try again!"<<endl;
continue;
}
arrLoop+=1;
}
答案 0 :(得分:1)
让我们做一个可行的例子
How many numbers do you want?
2
现在arrlimit == 2,arr的大小为1,checkarr的大小为1
Insert numbers (non negative integers only)
1
现在arrvalue == 1,arrLoop == 0,arr [0] == 1,checkarr [0] == 2
Insert numbers (non negative integers only)
1
现在arrvalue == 1,arrLoop == 1,arr [1] == 1,checkarr [1] ==2。最后两个错误是因为arr
和checkarr
的大小1,因此arr[1]
和checkarr[1]
是非法的。但是让我们忽略它并继续吧。
现在我们进入了最后一个循环,arrcheck == 0,所以arr[abs(checkarr[arrCheck])] >= 0
==> arr[abs(checkarr[0])] >= 0
==> arr[abs(2)] >= 0
==> arr[2] >= 0
,然后是arr [2]是非法的,因为arr的大小仅为1。
依次类推,基本上,您的代码会进行很多超出范围的访问。但是老实说,即使没有这些,我也不确定算法是否正确。