華為機試 (11/8)

科比的繆斯發表於2020-11-08

輸出最小的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;
}

相關文章