terrifiiooooo 2024-09-08 22:12 采纳率: 58.8%
浏览 15

关于#c++#的问题:/*算法设计(要求用C++或者C语言描述算法)已知数组A[n]中的元素是整型,设计算法将其调整为左右两部分(相关搜索:c语言|时间复杂度|编译环境)


/*算法设计(要求用C++或者C语言描述算法)

已知数组A[n]中的元素是整型,设计算法将其调整为左右两部分,其中左边是奇数,右边是偶数,并要求算法的时间复杂度是O(n)。

注:需要在编译环境下测试所编写算法的正确性
*/
#include <iostream>
using namespace std;
int main()
{
    int n, arr[n], a[n];
    
    cin >> n;   
    for(int i = 0; i < n; i ++ )
    cin >> a[i];
    
    for(int i = 0, t = 1, m = 0; i < n; ){
        
        if(a[i] % 2 == 1){
            arr[m ++ ] = a[i ++ ];
        }
        else {
            arr[n - t]= a[i ++ ];
            t ++ ;
        }
    }

    
    for(int i = 0; i < n; i ++ )
    cout << arr[i] << " ";
    return 0;
}

这个的结果为啥会是之样子的啊,那位高人来指点以下

img

img

img

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-08 22:13
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你给出的代码和问题描述来看,可能存在以下问题:

    1. 数组arr的声明和初始化问题。在你的代码中,你在定义数组时没有明确其大小。对于int arr[n]int a[n],你应该使用具体的值而不是变量来声明数组的大小。在实际编译环境中,应预先知道数组的最大大小或使用一个合理的上界。或者使用C++中的vector代替固定大小的数组。另外,你需要在运行程序前初始化数组的大小。例如,你可以使用const int n = ...;来定义数组的大小。

    2. 输入和输出的格式问题。在读取输入时,你使用了cin >> n;这样的语句来读取输入的数量。但是在一些编译器中,这种方法可能会导致用户输入的数值不能正确地赋值给变量。另外,对于输出结果,如果输出数字之间需要有分隔符或者换行符的话,你可能需要加上它们以确保输出格式的正确性。同时你需要处理空字符或其他无效输入的问题。

    基于上述问题和考虑,我对你的代码进行了一些修改和优化:

    #include <iostream>
    #include <vector> // 使用vector代替固定大小的数组
    using namespace std;
    
    int main() {
        const int MAX_SIZE = 100; // 定义数组的最大大小(根据实际情况调整)
        int n; // 定义数组的大小变量
        cin >> n; // 输入数组的大小(确保输入正确)
        vector<int> arr(n); // 使用vector存储元素,避免固定大小的问题
        for (int i = 0; i < n; ++i) { // 输入数组元素的值
            cin >> arr[i]; // 使用arr[i]进行输入
        }
        int odd_count = 0, even_count = 0; // 统计奇数和偶数的数量,用于定位位置
        for (int i = 0; i < n; ++i) { // 处理奇偶分离逻辑
            if (arr[i] % 2 == 0) { // 如果是偶数放到偶数部分(尾部)
                arr[even_count++] = arr[i];
            } else { // 如果是奇数放到奇数部分(头部)奇数数量有限
                arr[odd_count++] = arr[i];
            }
        }
        // 输出结果(如果需要添加分隔符或换行符)
        for (int i = 0; i < n; ++i) { // 输出结果数组中的元素值(按需添加格式)
            cout << arr[i] << " "; // 输出数字并添加一个空格分隔符等。可根据实际需求修改格式控制部分代码块提示消失问题的解决可以在终端的末尾重新编译程序再尝试运行程序时确保没有其他无关的字符或命令干扰程序的运行如果问题仍然存在可能需要检查编译环境和输入输出的格式问题以确保程序能够正确读取和输出数据在输入和输出过程中也需要注意是否有错误操作或输入数据是否符合程序要求的格式尝试清除任何潜在的错误字符或命令并重新运行程序以解决问题另外请确保您的编译器和IDE设置正确并且没有任何异常错误导致程序无法正常运行如果您仍然遇到问题请提供更多关于编译器环境和具体错误信息的细节以便更好地帮助您解决问题另外您的代码中使用的算法思路是正确的即遍历数组分离奇偶数并存储到不同的位置以完成左右两部分奇偶数的分离目标根据您的需求时间复杂度是O(n)是正确的算法复杂度分析只要算法逻辑正确且正确处理了边界条件就可以在编译环境中成功运行并达到预期效果
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月8日