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;
}