C++也可以很简洁
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int a[105];
int main(){
int i = 0;
while(scanf("%d", &a[i]) == 1) i++;
sort(a, a + i - 1);
for(int j = 0; j < a[i-1]; j++){
if(j == 0) printf("%d", a[j]);
else printf(" %d", a[j]);
}
printf("\n");
}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//方法一:用sort排序
/*
int main()
{
vector<int>vec;
int x;
while (cin >> x)
{
if (x == 0)
break;
vec.push_back(x);
}
sort(vec.begin(), vec.end() - 1);
for (int i = 0; i<vec[vec.size() - 1]; i++)
cout << vec[i] << " ";
cout << endl;
}
*/
//方法二:用快排中的partition思想
int partition(vector<int>&vec, int start, int end)
{
int pivot = vec[start];
while (start<end)
{
while (start<end&&pivot<=vec[end])
end--;
vec[start] = vec[end];
while (start<end&&pivot>=vec[start])
start++;
vec[end] = vec[start];
}
vec[start] = pivot;
return start;
}
void GetKsmallNumber(vector<int> &vec, int k)
{
int length = vec.size() - 1; //总长度要除去最后一个元素k
int start = 0, end = length - 1;
int index = partition(vec, start, end);
while (index != k - 1)
{
if (index>k - 1)
{
end = index - 1;
index = partition(vec, start, end);
}
else
{
start = index + 1;
index = partition(vec, start, end);
}
}
}
int main()
{
vector<int> vec;
int x;
while (cin >> x)
{
if (x == 0) //假设输入为0,结束while循环,因为原题目不知道vec数组的大小
break; //只是在VS测试要有结束条件,假设输入为0结束,做题时不需要的
vec.push_back(x);
}
int k = vec[vec.size() - 1];
GetKsmallNumber(vec, k); //前k个数是数组中最小的K个数,但是不一定是有序的,对前k个元素用sort排序
sort(vec.begin(), vec.begin() + 5); //对前k个元素用sort排序
for (int i = 0; i<k; i++)
{
if (i<k - 1)
cout << vec[i] << " "; //前k个数格式:数字+空格
else
cout << vec[i] << endl; //第K个数格式:数字+换行
}
} #include <iostream>#include <vector>#include <algorithm>using namespace std;intmain(){intx;vector<int>v;intn;while(cin>>x)v.push_back(x);n = v.back();v.pop_back();sort(v.begin(),v.end());for(inti = 0; i < n;++i){cout<<v.at(i);if(i < n-1)cout<<' ';elsecout<<endl;}return0;}
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); String[] string=in.nextLine().split(" "); int[] array=new int[string.length-1]; for(int i=0;i<string.length-1;i++){ array[i]=Integer.parseInt(string[i]); } Arrays.sort(array); for(int i=0;i<Integer.parseInt(string[string.length-1]);i++){ System.out.print(array[i]); if(i!=Integer.parseInt(string[string.length-1])-1){ System.out.print(" "); } } } }
PHP so easy
<?php
$str = trim(fgets(STDIN));
$arr = explode(' ', $str);
$n = array_pop($arr);
sort($arr);
$res = [];
for($i=0; $i<$n; $i++){
$res[] = $arr[$i];
}
echo implode(" ", $res);
PHP 不使用函数,利用冒泡,排序的思路,每次将较小的往前冒泡。
<?php
$str = trim(fgets(STDIN));
$arr = explode(' ', $str);
$n = array_pop($arr);
$res = [];
for($i=0; $i<$n; $i++){
for($j=count($arr)-1; $j>0; $j--){
if($arr[$j] < $arr[$j-1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $temp;
}
}
}
for($k=0; $k<$n; $k++){
$res[] = $arr[$k];
}
echo implode(" ", $res);
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String temp = sc.nextLine();
String[] arr = temp.split(" ");
int[] result = new int[arr.length-1];
int k = 0;
for(int i=0;i<arr.length;i++){
if(i<arr.length-1)
result[i]=Integer.parseInt(arr[i]);
else
k=Integer.parseInt(arr[i]);
}
Arrays.sort(result);
for(int i=0;i<k;i++){
if(i<k-1)
System.out.print(result[i]+" ");
else
System.out.println(result[i]);
}
}
}
}
/*这题目重点应该是怎么样获取输入的数,这种方法掌握就可以了*/importjava.util.*;publicclassMain{publicstaticvoidmain(String args[]){Scanner s= newScanner(System.in);String str =s.nextLine().toString();String b[]=str.split(" ");intnum[] =newint[b.length-1];for(inti=0;i<b.length-1;i++){num[i]=Integer.parseInt(b[i]);}intk=Integer.parseInt(b[b.length-1]);Arrays.sort(num);for(inti=0;i<k;i++){if(i==num.length)break;System.out.print(num[i]);if(i!=k-1)System.out.print(" ");}}}
import re
out_put = ""
"""
分开输入,pop记录最后一个数字并排序
python 写起来多方便 赶紧放弃java
"""
input_val = raw_input()
input_val = re.split(" ",input_val)
last_input=input_val.pop()
input_val.sort(key=int)
"""
重组输出
"""
for num in range(0,int(last_input)):
out_put = out_put + input_val[num]+" "
out_put = out_put[:-1]
print(out_put)
while(line = readline()) {function a(line) {var arr = line.split(' ')if(arr.length <= 101) {var k = arr.pop()arr.sort(function (a,b) {return a - b})var newArr = []for(var i = 0; i < k; i++) {newArr.push(arr[i])}return newArr.join(' ')}}console.log(a(line))}
import java.util.Scanner;
import java.util.Arrays;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
String[] strs = str.split(" ");
int[] nums = new int[strs.length-1];
for(int i=0;i<strs.length-1;i++){
nums[i]=Integer.valueOf(strs[i]);
}
int k = Integer.valueOf(strs[strs.length-1]);
Arrays.sort(nums);
for(int i=0;i<k;i++){
System.out.print(nums[i]);
if(i != k-1){
System.out.print(" ");
}
}
}
}
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec;
int num;
while(cin >> num) {
vec.push_back(num);
}
int k = vec.back();
vec.pop_back();
partial_sort(vec.begin(), vec.begin()+k, vec.end());
for(int i = 0;i < k;i++) {
i == k-1 ? cout << vec[i] << endl : cout << vec[i] << ' ';
}
return 0;
}
//冒泡法,冒泡k次出k个最小值
#include <iostream>
using namespace std;
int main()
{
int *n = new int[100];
int num = 0;//数据个数
while(cin >> n[num++]);
num-=2;
//冒泡
int k = n[num];//k值
for(int j = 0; j < k; j++)//k次冒泡
{
for(int i = 1; i < num - j; i++)
{
if(n[i-1] < n[i])
{
int tmp = n[i];
n[i] = n[i-1];
n[i-1] = tmp;
}
}
}
//输出结果
for(int i = num - 1; i > num - 1 - k; i--)
{
cout << n[i];
if(i != num - k)
cout << " ";
}
delete []n;
return 0;
}
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
ArrayList<Integer> list=new ArrayList<>();
while(input.hasNext()){
list.add(input.nextInt());
}
int k=list.remove(list.size()-1);
Collections.sort(list);
for(int i=0; i<k-1; i++){
System.out.print(list.get(i)+" ");
}
System.out.println(list.get(k-1));
}
}
_____________________________________________________________________________________________
顺手练习一下刚学会的归并排序
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
ArrayList<Integer> list=new ArrayList<>();
while(input.hasNext()){
list.add(input.nextInt());
}
int[] a=new int[list.size()-1];
for(int i=0; i<list.size()-1; i++)
a[i]=list.get(i);
int k=list.get(list.size()-1);
sort(a, 0, a.length-1);
for(int i=0; i<k-1; i++){
System.out.print(a[i]+" ");
}
System.out.println(a[k-1]);
}
public static void sort(int[] a, int left, int right){
if(left<right){
int mid=(right+left)/2;
sort(a, left, mid);
sort(a, mid+1, right);
merge(a, left, mid, right);
}
}
public static void merge(int[] a, int left, int mid, int right){
int[] b=new int[right+1];
int index=left;
int x=left;
int y=mid+1;
while(x<=mid && y<=right){
b[index++]=(a[x]<a[y])? a[x++]:a[y++];
}
while(x<=mid)
b[index++]=a[x++];
while(y<=right)
b[index++]=a[y++];
for(int i=left; i<=right; i++)
a[i]=b[i];
}
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int partition(vector<int> &v, int l,int h)
{ int p = v[l]; while(l<h) { while(l<h && p<=v[h]) h--; v[l] = v[h]; while(l<h && p>=v[l]) l++; v[h] = v[l]; } v[l] = p; return l;
}
void GetKsmallest(vector<int> &v, int k)
{ int len = v.size()-1; int l = 0, h = len-1; int index = partition(v, l, h); while(index != k-1) { if(index > k-1) { h = index - 1; index = partition(v, l ,h); }else{ l = index + 1; index = partition(v, l ,h); } } }
int main()
{ vector<int> v; int x; while(cin>>x) v.push_back(x); int k = v[v.size()-1]; GetKsmallest(v, k); sort(v.begin(), v.begin()+5); for(int i=0;i<k;i++) { if(i==k-1) cout<<v[i]<<endl; else cout<<v[i]<<" "; } return 0;
} 代码思路很简单,主要是对最后一个数字进行判断
用stringstream做输入,然后一个Map解决的事情
#include<iostream>
#include<map>
#include<string>
#include<sstream>
using namespace std;
int main(){
map<int,int> table;
map<int, int>::iterator it;
int cur, index = 0;
string s;
getline(cin, s);
stringstream ss;
ss << s;
while (!ss.eof()){
ss >> cur;
if (!(table.find(cur)==table.end()))
table[cur]++;
else
table.insert(pair<int, int>(cur, 1));
}
if (table[cur] > 1)
table[cur]--;
else
table.erase(cur);//最后一个数为k,所以要从map里删除
it = table.begin();
for (int i = 0; i < cur;){
while (it->second--){
if(i==cur-1)
cout<<it->first;
else
cout << it->first<<" ";
i++;
}
it++;
}
}
#include <iostream>
#include <algorithm>
#include <sstream>
using namespace std;
const int maxn = 105;
string p;
int arr[maxn];
int main()
{
getline(cin, p);
stringstream ss;
ss << p;
int n = 0;
int k;
while(!ss.eof()) {
ss >> arr[n++];
}
k = arr[n - 1];
sort(arr, arr + n - 1);
for(int i = 0; i < k; i++) {
cout << arr[i];
i != k - 1 ? cout << " " : cout << endl;
}
return 0;
}