在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4

Input a list of n integers in an array and arrange them in a way similar to the to-and-fro movement of a Pendulum. input-1 3 2 5 4,output5 3 1 2 4

本文关键字:输入 方式 排列 移动 输出 钟摆 整数 数组 列表 类似于      更新时间:2023-10-16
#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 作为最后一个元素,尽管它适用于示例情况。

问题是这个测试:

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

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