问题 3853 --扑克牌问题(完善程序)

3853: 扑克牌问题(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 359  解决: 236
[提交][状态][命题人:]

题目描述

取一幅扑克牌中所有的方块,

按A、2、3、4、5、6、7、8、9、10、J、Q、K的顺序从上至下排好,

并按下面的要求逐一取走牌:

翻出最上面的一张,放在一旁,把上面的一张牌放到这叠牌的最下面;

然后再翻开最上面的一张牌,放在一旁,再把上面的一张牌放到最下面;

重复上述过程,直到翻完最后一张牌。

按照顺序输出每次放在一旁的牌的牌面。

[Python]

def card(n):
    if n == 1:
        return 'A'
    elif n == 11:
        return 'J'
    elif n == 12:
        return 'Q'
    elif n == 13:
        return 'K'
    else:
        return n
linked = []
for i in range(12):
    linked.append([i+1, i+1])
linked.append(_____(1)_____)

precedent = 12
b=[]
for i in range(13):
    current = _______(2)_________
    b.append(card(_____(3)__________))
    _____(4)________=linked[current][1]
    _____(5)________= linked[precedent][1]

print("lastcard:",b[-1],sep='')
for i in range(len(b)):
    print(b[i],end=' ')

[C++]

#include<iostream>
using namespace std;
const string cards = "A23456789 JQK";
int link[20], take[20];
int precedent, current;
void print(int x)
{
    if(x == ___(1)____)cout << "10 ";
    else 
	cout << cards[x-1] << " ";
}
int main( )
{
    for(int i=1; i < 13; i++) 
	link[i] = i+1;
    link[13] = ____(2)____;
    precedent = 13;
    for(int i = 1; i <= 13; i++)
	{
        current = _____(3)_____; 
	take[i] = _____(4)_____;
        _____(5)_____ = link[current];
        _____(6)_____ = link[precedent];
    }
    cout << "lastcard:"; 
	print(precedent); 
	cout << endl;
    for(int i = 1; i <= 13; i++) 
		print(____(7)_____);
    cout << endl;
    return 0;
}

输入

输出

第一行输出最后一张牌具体是哪一张,前面加上“lastcard:”

第二行输出先后被移出的牌,空格隔开

提示

来源

[提交][状态]