绝对值排序

绝对值排序

时间: 1ms        内存:64M

描述:

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

输入:

输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

输出:

对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

示例输入:

3 3 -4 2
4 0 1 2 -3
0

示例输出:

-4 3 2
-3 2 1 0

提示:

参考答案(内存最优[748]):

#include <stdio.h>
main()
{
     int n,a[101],b[101],c,i,j;
     while (scanf("%d",&n),n!=0)
     {
       for(i=1;i<=n;i++)
       {
        scanf("%d",&a[i]);
        b[i]=a[i];
        if(a[i]<0)
        a[i]=-a[i];
       }
       for(j=1;j<n;j++)
       for(i=2;i<=n;i++)
       {
         if(a[i]>a[i-1])
         {
           c=a[i-1];
           a[i-1]=a[i];
           a[i]=c;
         }
       }
        for(i=1;i<=n;i++)
        {
          for(j=1;j<=n;j++)
          {
           if(a[i]==b[j]||a[i]==-b[j])
           printf("%d",b[j]);
          }
           if(i!=n)
           printf(" ");
        }
        printf("\n");
     }
   
}

参考答案(时间最优[0]):

#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cmath>
using namespace std;
int num[102];

bool comp(int a,int b)
{
    if(abs(a)>abs(b))
        return true;
    return false;
}

int main()
{
    int n;
    while(cin>>n&&n)
    {
        for(int i=0;i<n;i++)
            cin>>num[i];
        sort(num,num+n,comp);
        for(int i=0;i<n-1;i++)
            cout<<num[i]<<" ";
            cout<<num[n-1];
        cout<<endl;
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注