PTA 利用STL比较数据大小并排序

本题目要求读入n个整数(输入数字个数根据输入时随机确定,以输入一个非数字的值作为输入结束标志),利用STL比较数据大小并排序(由小到大升序),然后输出排序后的数据。

输入格式:

输入在一行中依次输入整数值,每个数字之间用空格分隔,输入数字个数根据输入时随机确定,以输入一个非数字的值作为输入结束标志。

输出格式:

先输出一段提示“从标准设备读入数据,直到输入是非整型数据为止”,在输入一组数字后,输出排序后的数字,在一行中由小到大依次输出所有值,数字之间用空格分隔。

输入样例:

10 3 -2 8 20 -9 e

输出样例:

从标准设备读入数据,直到输入是非整型数据为止
 -9 -2 3 8 10 20

思路:c++的话直接输入就可以了(原因可能是语言的特性?没有深究,如果有大佬知道的话,欢迎评论区留言)

java的话加一些判断就可以解决。

java版:

import java.util.*;

public class Main {
    static Scanner sc = new Scanner(System.in);
    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>();
        int n = 0;
        while(sc.hasNext()) {
            String s = sc.next();
            boolean is = true;
            String s1 = "";//用于如果读入了有数字有非数字的情况,将整数保留。
            for (int i = 0; i < s.length(); i++) {
                if (i == 0 && s.charAt(i) == '-') {
                    if (s.length() > 1) {//判断是否为负数
                        s1 += s.charAt(i);
                        continue;
                    }
                    is = false;
                    break;
                }
                if (s.charAt(i) < '0' || s.charAt(i) > '9') {
                    is = false;
                    break;
                }
                s1 += s.charAt(i);
            }
            if (!is) {
                if(s1.length() > 0) arr.add(Integer.parseInt(s1));
                break;
            }
            arr.add(Integer.parseInt(s));
        }
        Collections.sort(arr);
        System.out.println("从标准设备读入数据,直到输入是非整型数据为止");
        for (int i = 0; i < arr.size(); i++) {
            System.out.print(" " + arr.get(i));
        }
        System.out.println();
    }
}

c++版:

#include <bits/stdc++.h>//万能头
using namespace std;
vector<int> vec;//动态数组
int main()
{
    cout << "从标准设备读入数据,直到输入是非整型数据为止\n";
    int x;
    while(cin >> x) vec.push_back(x);
    sort(vec.begin(), vec.end());
    for(int i = 0; i < vec.size(); i++) {
        cout << " " << vec[i];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值