c++ - 在数组中输入一个包含 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 作为最后一个元素,尽管它在示例案例中工作正常。
解决方案
问题是这个测试:
}while(j>=0 && i<=n);
在偶数个参数的情况下,j>=0 将在 i<=n 变为假之前的一圈为假。因此,将不会处理最后一个最正数。您需要找到一种方法来分别处理这两种最终情况(i 和 j)!