close
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")
文章標籤
全站熱搜