我的重复检查代码中的错误到底在哪里?

时间:2018-09-11 10:33:12

标签: c++ duplicates

我正尝试在我感兴趣的编程问题中用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;
    }

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。最后两个错误是因为arrcheckarr的大小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。

依次类推,基本上,您的代码会进行很多超出范围的访问。但是老实说,即使没有这些,我也不确定算法是否正确。