Content

在許多電腦問題中,必須置換數據陣列。
也就是說,必須以某些指定順序重新排列數組中的數據。
置換任意數據數組的一種方法是使用索引數組指定置換,以指出元素在新數組中的位置。

Input

第一行為一個整數T,代表Case數量。
每個Case前有皆有一個空白行做為開頭。
每個Case將包含兩行數字。
第一行是索引數組p,從1~n。此行中的數字將以某種方式排列。
第二行為數據數組x,可能包含浮點格式。

Output

對於每個Case。
請將數據數組x根據索引數組p進行排序。
並且將排序好的數據數組x輸出,每個數據一行(如範例輸出)。
兩個連續Case由空白行分隔。

Sample Input #1
1

3 1 2
32.0 54.7 -2
Sample Output #1
54.7
-2
32.0

C++

/*
1(case數)
(有一行空白) 
3 1 2(索引) 
32.0 54.7 -2(值) 

54.7
-2
32.0
*/ 
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main(){
	
	//ios::sync_with_stdio(0);
	//cin.tie(0);
	int t;
	string s;
	cin>>t; //輸入測資 
	getline(cin,s); //清除cin剩下的'\n' 
	while(t--){
		vector<int> v1;
		getline(cin,s);//讀入空白 
		getline(cin,s);//讀入索引
		
		stringstream ss(s);
		int p1;
		while(ss>>p1){
			v1.push_back(p1); //v {3,1,2} 
		}
		/*test
		for(int i=0;i<v1.size();i++){
			cout<<v1[i]<<" ";
		}*/
		
		
		/*--------------------------------*/
		vector<string> v2;
		getline(cin,s);//讀入目標 
		
		ss.clear() ;
		ss.str(s);
		
		string p2;
		while(ss>>p2){
			v2.push_back(p2); 
		}
		
		/*test
		for(int i=0;i<v1.size();i++){
			cout<<v2[i]<<" ";
		}*/
	 
		//cout<<v1.size()<<"\n";
		
		string ans[v1.size()+1]; /*因為剛剛輸入index是從1 開始,所以要多開一個 */ 
		
		for(int i=0;i<v1.size();i++ ){
			ans[v1[i]]=v2[i];
		}
		for(int i=0;i<v1.size()+1;i++){
			cout<<ans[i]<<"\n";
		}
	}
	
	
	return 0;
}

python:

t=int(input())

for _ in range(t):
    o=input()#他在昢一次讀入廁資都會要一行空白
    index=list(map(int,input().split()))
    #print(*index)
    num=list(map(str,input().split()))
    #print(num)
    ans=['0']*(len(index)+1)
    for i in range(len(index)):
        ans[index[i]]=num[i]
    ans=ans[1:]
    print(*ans,sep="\n")
    

 

arrow
arrow
    文章標籤
    高中生程式解題 python C++
    全站熱搜
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()