本题目要求读入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];
}
}