输出最小的k个数
输入n个整数,输出其中最小的k个。
本题有多组输入样例,请使用while(cin>>)等方式处理
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while ((str = br.readLine()) != null) {
if (str.equals("")) continue;
String[] params = str.split(" ");
int n = Integer.parseInt(params[0]), k = Integer.parseInt(params[1]);
int[] res = new int[n];
int start = 0, index = 0;
if (params.length > 2) start = 2;
else params = br.readLine().split(" ");
for (int i = start; i < params.length; i++) {
res[index++] = Integer.parseInt(params[i]);
}
Arrays.sort(res);
StringBuilder ans = new StringBuilder();
for (int i = 0; i < k; i++) ans.append(res[i]).append(" ");
System.out.println(ans.toString().trim());
}
}
}
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int num, n;
while(cin>>num>>n){
int a[num];
for(int i=0;i<num;i++){
cin>>a[i];
}
sort(a,a+num);
for(int i=0;i<n-1;i++){
cout<<a[i]<<' ';
}
cout<<a[n-1]<<endl;
}
return 0;
}
成绩排序
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96
注:0代表从高到低,1代表从低到高
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
* 查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
jack 70
Tom 70
peter 96
注:0代表从高到低,1代表从低到高
*/
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String str="";
while((str=br.readLine())!=null){
int n=Integer.parseInt(str.trim());
int bool=Integer.parseInt(br.readLine().trim());
String[] name =new String[n];
int[] score=new int[n];
for(int i=0;i<n;i++){
str=br.readLine().trim();
String[] temp= str.split(" ");
name[i]=temp[0];
score[i]=Integer.parseInt(temp[1]);
}
if(bool==0){ // 由高到低
for(int i=0;i<n;i++){
for(int j=0;j<n-1-i;j++){
if(score[j+1]>score[j]){
String na=name[j];
name[j]=name[j+1];
name[j+1]=na;
int t=score[j];
score[j]=score[j+1];
score[j+1]=t;
}
}
}
}else{ // 由低到高
for(int i=0;i<n;i++){
for(int j=0;j<n-1-i;j++){
if(score[j+1]<score[j]){
String na=name[j];
name[j]=name[j+1];
name[j+1]=na;
int t=score[j];
score[j]=score[j+1];
score[j+1]=t;
}
}
}
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<n;i++) {
sb.append(name[i] + " ");
sb.append(score[i]);
// if(i!=(n-1)) {
// sb.append("\n");
// }
sb.append("\n");
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb.toString());
}
}
}
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
class user {
public:
string name;
int score;
};
bool cpmpare0(user a, user b) {
return a.score > b.score ;
}
bool cpmpare1(user a, user b) {
return a.score < b.score;
}
int main() {
int count,flag;
while (cin>>count>>flag) {
vector<user> biao;
for (int i = 0; i < count; i++) {
user temp;
cin >> temp.name >> temp.score ;
biao.push_back(temp);
}
if(flag)
stable_sort(biao.begin(), biao.end(), cpmpare1);
else
stable_sort(biao.begin(), biao.end(), cpmpare0);
for (int i = 0; i < count; i++) {
cout << biao[i].name << " " << biao[i].score << endl;
}
}
}
火车进站
给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。要求以字典序排序输出火车出站的序列号。
(1)这时候可以是1 到站后 马上就出站;然后2 进站,然后2出站;最后3进站,然后3出站;这时候出站顺序是 1 2 3;
(2)也可以是1 进站,2进站,这时候,必须2先出站,接着1出站。最后是3进站,然后3出站;这时候出站顺序是2 1 3;
(3)当然也可以是1 进站,2进站,3进站;然后必须是 3 先出站,2 次出站,1最后出站
解释一下为什么3 1 2不可以;
要是3先出站,必须是 1 进站 2进站 3进站;这时候3出站,但是这时候2在1的前面,必须是2先出站最后是1出站,因此3 1 2这个答案不行;
import java.util.*;
public class Main{
static Stack<String> stack = new Stack<String>();
static Stack<String> list = new Stack<String>();
static List<String> result = new ArrayList<>();
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
in.nextLine();
String line = in.nextLine();
process(line);
}
}
public static void process(String s){
String[] strs = s.split("\\s");
for(int i=strs.length-1; i>=0; i--){
list.push(strs[i]);
}
method("");
Collections.sort(result);
for(String r : result){
System.out.println(r);
}
}
public static void method(String s){
if(stack.empty()&&list.empty()){
result.add(s.trim());
return ;
}
if(!stack.empty()){
String str = stack.pop();
method(s+" "+str);
stack.push(str);
}
if(!list.empty()){
String str = list.pop();
stack.push(str);
method(s);
stack.pop();
list.push(str);
}
}
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_N 10
char result[12000][12];
int result_cnt;
int stack1[MAX_N];
int index1;
int stack2[MAX_N];
int index2;
int stack3[MAX_N];
int index3;
int size;
void dfs(){
if(index3==size){
int i;
for(i=0;i<size;i++)
result[result_cnt][i]=stack3[i]+'0';
result[result_cnt][i]='\0';
result_cnt++;
return;
}
if(index2!=-1){//站内有车
stack3[index3]=stack2[index2];
index3++;
index2--;
dfs();
stack2[++index2]=stack3[--index3];
}
if(index1<size){
stack2[++index2]=stack1[index1];
index1++;
dfs();
index2--;
index1--;
}
}
int comp(const void *a,const void *b){
return strcmp((char*)a,(char*)b);
}
int main(){
while(scanf("%d",&size)!=EOF){
int i,j;
for(i=0;i<size;i++){
scanf("%d",&stack1[i]);
}
index1=0;
index2=-1;
index3=0;
result_cnt=0;
dfs();
qsort(result,result_cnt,sizeof(result[0]),comp);
for(i=0;i<result_cnt;i++){
for(j=0;j<size;j++){
printf("%c ",result[i][j]);
}
printf("\n");
}
}
return 0;
}