回 帖 发 新 帖 刷新版面

主题:杭电2020题如下编译出现presentation error,求高手指点

#include<iostream>
#include<vector>
#include<set>
#include<cmath>
using namespace std;

int main(void)
{
    int n;
    while(cin>>n,n!=0)
    {
        if(n>0 && n<=100)
        {
            vector<int>vect;
            int ix2=0;
            while(ix2<n)
            {
                int temp;
                cin>>temp;
                vect.push_back(temp);
                ix2++;
            }
            
            for(vector<int>::size_type ix=0;ix!=vect.size()-1;ix++)
            {
                for(vector<int>::size_type ix1=0;ix1!=(vect.size()-ix-1);ix1++)
                {
                    if(abs(vect[ix1])<abs(vect[ix1+1]))
                    {
                        vector<int>::value_type temp=vect[ix1];
                        vect[ix1]=vect[ix1+1];
                        vect[ix1+1]=temp;
                    }
                }
            }
            for(vector<int>::iterator iter=vect.begin();iter!=vect.end();)
            {
                if((iter+1)!=vect.end() && *iter==*(iter+1))
                {
                    iter=vect.erase(iter);
                }
                else
                {
                    iter++;

                }

            }

            for(vector<int>::iterator ixx=vect.begin();ixx!=vect.end();ixx++)
            {
                cout<<*ixx<<" ";
            }
            cout<<endl;
        
        }
        
    }
    return 0;
}

回复列表 (共5个回复)

沙发

输出格式错误

http://blog.cnii.com.cn/?75821/viewspace-14079

板凳

杭电2020题

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

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

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

Sample Input
3 3 -4 2
4 0 1 2 -3
0

Sample Output
-4 3 2
-3 2 1 0

3 楼

嘿嘿
[code=c]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void)
{
    for( size_t n; cin>>n && n!=0; )
    {
        std::vector<int> buf(n);
        for( int& v : buf )
            cin >> v;

        std::sort( buf.begin(), buf.end(), [](int e1, int e2){ return abs(e1)>abs(e2); } );

        for( const int& v : buf )
            cout << v << ( (&v!=&buf.back()) ? ' ' : '\n' );
    }

    return 0;
}
[/code]

4 楼

C++0x用起来真爽!

我火星了,没注意到这东西已经可以用了。

5 楼



人家的例子看清楚。负数允许 并且排列时负数在前面 不用abs{}函数吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册