列表

详情


NC207977. 找规律

描述

扑克是大众喜欢娱乐的项目,因其玩法多种多样深受人们喜爱,但是扑克牌每玩完一次均要重新洗牌,这样很麻烦。而且人工洗牌容易作弊,造成不公平竞技。因此发明一种扑克牌自动发牌机以满足人们娱乐的需要。随着各种娱乐产品的发展,各种娱乐产品的洗牌机也陆续的出现。一般的洗牌机是由塑料制成,也有金属和木质的洗牌机。现在有一个神奇的洗牌机,每次洗牌总以相同的方式打乱牌序。例如,将A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K放进去,用机器洗两次牌后得到新的牌序:10, 9, Q, 8, K, 3, 4, A, 5, J, 6, 2, 7。现在输入任意牌序,请你输出洗牌5次后的结果。

输入描述

多组输入,每个文件不超过1000组
第一行,输入任意牌序,用空格隔开(不重复、不缺少)
第二行,输入两次洗牌后的牌序,用空格隔开

输出描述

一行,洗牌五次后的牌序,用空格隔开

示例1

输入:

A 2 3 4 5 6 7 8 9 10 J Q K
10 9 Q 8 K 3 4 A 5 J 6 2 7
A Q 6 J 4 K 9 10 7 3 5 8 2 
8 7 A Q 9 5 K 10 2 6 3 J 4

输出:

K J A 9 3 8 2 5 6 7 4 10 Q
5 A K 6 Q 2 7 10 8 9 4 3 J

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 18ms, 内存消耗: 736K, 提交时间: 2020-06-28 22:45:25

#include<bits/stdc++.h>
using namespace std;
string s[30];
string t[30];
int a[30];
void init_a(){
	for(int i=0;i<13;i++){
		for(int j=0;j<13;j++){
			if(s[i] == t[j]){
				a[i] = j;
				break;
			}
		}
	}
}
void sol(){
	for(int i=0;i<13;i++){
		t[a[i]] = s[i];
	}
	for(int i=0;i<13;i++){
		s[i] = t[i];
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	//freopen("in.txt","r",stdin);
	while(cin>>s[0]){
		for(int i=1;i<13;i++) cin>>s[i]; 
		for(int i=0;i<13;i++) cin>>t[i]; 
		init_a();
		for(int i=0;i<9;i++) sol();
		for(int i=0;i<13;i++) cout<<s[i]<<" "; cout<<endl;
		//cout<<"end"<<endl;
	}
	return 0;
}

C++(g++ 7.5.0) 解法, 执行用时: 19ms, 内存消耗: 544K, 提交时间: 2023-03-28 20:14:42

#include<bits/stdc++.h>
using namespace std;
const int N=13;
string a[N],b[N],c[N];
signed main()
{
    while(cin>>a[0])
    {
        map<string,string> mp;
        for(int i=1;i<13;i++)cin>>a[i];
        for(int i=0;i<13;i++)cin>>b[i],mp[a[i]]=b[i];
        for(int i=0;i<9;i++)
        {
            for(int j=0;j<13;j++)
            {
                a[j]=mp[a[j]];
                c[j]=a[j];
            }
        }
        for(int j=0;j<13;j++)cout<<a[j]<<' ';
        cout<<'\n';
    }
}

C++11(clang++ 3.9) 解法, 执行用时: 23ms, 内存消耗: 540K, 提交时间: 2020-07-09 15:45:36

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s[13],t[13];
	while(cin>>s[0]){
		map<string,string>mp;
		for(int i=1;i<=12;i++) cin>>s[i];
		for(int i=0;i<13;i++){
			cin>>t[i];
			mp[s[i]]=t[i];
		}
		for(int i=0;i<9;i++){
			for(int j=0;j<13;j++){
				s[j]=mp[s[j]];
			}
		}
		for(int i=0;i<13;i++)
		cout<<s[i]<<' ';
		cout<<endl;
	}
	return 0;
}

上一题