gpt4 book ai didi

c++ - 如何在保持顺序的同时填充一个整数数组?

转载 作者:太空狗 更新时间:2023-10-29 20:37:25 24 4
gpt4 key购买 nike

我想做一个简单的练习,我想从用户输入中填充一个整数数组,并保持输入顺序,这样就不需要在用户完成后对数组进行排序。

假设数组的状态是这样的:{ 3, 5, 7, 8, 9,-,-,-,-,- }(- 表示空)

现在这个状态,比如输入6,arr[1]之后的所有元素都应该往前移动一位,这样6就可以放到arr[2]中了。

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
bool ok = true;
int x // the input
, n = 0 // to keep track of numbers already in the array
, i, j // to iterate in loops
, arr[10];

cout << "Enter 10 numbers: \n";
while (cin >> x) {
if (n == 0) { arr[n] = x; n++; } // for the first entry.

else if (x < arr[0]) { // is x lower than the first element in the array?
for (i = n; i > 0; i--)
arr[i] = arr[i - 1];
arr[0] = x; n++;
}

else if (x > arr[n - 1]) { // is x greater than the top of already addded
// elements to the array?
arr[n] = x; n++;
}

else { // when x is in between of elements. Also I think the problem is here.
for (i = 0; i < n && ok; i++)
if (x > arr[i] && x < arr[i + 1]) {
for (j = n; j > i + 1; j--)
arr[j] = arr[j - 1];
ok = false;
}
arr[i + 1] = x; n++;
}

if (n == 10) break; // if you reached to end of the array, break while.
}

for (i = 0; i < 10; i++)
cout << arr[i] << " ";

cin.get();
cin.get();
}

这段代码有很多问题,但是当我尝试输入 1、10、2、3、4、5、6、7、8、9 时,程序不会将 10 移动到数组末尾,输出:1, 10, 2, 3, 4, 5, 6, 7, 8, 9。

最佳答案

这里的问题是 for 循环的递增步骤总是在前一个执行条件为真时执行。

    for (i = 0; i < n && ok; i++) // i is incremented
if (x > arr[i] && x < arr[i + 1]) {
for (j = n; j > i + 1; j--)
arr[j] = arr[j - 1];
ok = false;
}
arr[i + 1] = x; n++;

所以在插入“2”后,for 循环的条件为真:

for (i = 0; i < n && ok; i++) 

然后执行 for 循环的主体并且 i 递增。现在再次检查条件并将其评估为 false,但 i 仍然是 1 而不是预期值 0。

所以在执行之后

    arr[i + 1] = x; n++;

你的数组看起来像:[1] [10] [2]

关于c++ - 如何在保持顺序的同时填充一个整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com