首页 > 解决方案 > 在数组中输入一个包含 n 个整数的列表,并以类似于钟摆的来回运动的方式排列它们。输入 1 3 2 5 4,输出 5 3 1 2 4

问题描述

#include <iostream>
using namespace std;

int main() {
    int i,j,k=0,temp=0,x,n,m=0;
    cin>>x;
    while(x--)
    {
        cin>>n;
        int a[n];
        for(i=0;i<n;i++)
        cin>>a[i];
        for(i=0;i<n-1;i++)
        {
            for(j=0;j<n-i-1;j++)
            {
                if(a[j]>a[j+1])
                {
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;

                }
            }
        }
        int b[n];
        m=(n-1)/2;
        b[m]=a[0];
        i=m+1;
        j=m-1;
        k=1;

        do
        {
            b[i]=a[k];
            k++;
            b[j]=a[k];
            i++,j--;
            k++;
        }while(j>=0 && i<=n);
        for(i=0;i<n;i++)
        printf("%d ",b[i]);


        cout<<endl;
    }
    return 0;
}

输入:8

539 161 985 856 166 29 726 590

其正确输出为:856 590 166 29 161 539 726 985

你的代码的输出是:856 590 166 29 161 539 726 0

在上面的代码中,为什么输出显示 0 作为最后一个元素,尽管它在示例案例中工作正常。

标签: c++

解决方案


问题是这个测试:

    }while(j>=0 && i<=n);

在偶数个参数的情况下,j>=0 将在 i<=n 变为假之前的一圈为假。因此,将不会处理最后一个最正数。您需要找到一种方法来分别处理这两种最终情况(i 和 j)!


推荐阅读