魔术师翻牌:魔术师把扑克中的13张黑桃预先排好后,牌面朝下放在手中。第一次数一张牌,翻过来恰好是A,放在桌面上,第二次数两张牌,数1的那张放在手中牌的下面,数2的那张牌翻过来恰好是2,也放在桌面上,再数三张牌,顺次把数1、2的牌放在手中牌的下面,第三张牌翻过来恰好是3,仍然放在桌面上。这样继续做下去,直到手中的13张牌全部翻完为止,此时桌面上的牌的顺序恰好是:A,2,3,4,5,……,J,Q,K。请编程找出魔术师手中的那13张牌的原始顺序。
#include <iostream>
using namespace std;
struct Node
{
int value;
Node *next;
};
int main()
{
Node *head = NULL, *temp, *prev = NULL;
for (int i = 0; i < 13; i++)
{
temp = new Node;
temp -> value = 0;
if (head == NULL)
head = temp;
if (prev != NULL)
{
prev -> next = temp;
}
prev = temp;
}
temp -> next = head;
temp = head;
temp -> value = 1;
for (int i = 2; i <= 13; i++)
{
for (int j = 0; j < i; j++)
{
temp = temp -> next;
if (temp -> value != 0)
j--;
}
temp -> value = i;
}
temp = head;
do
{
cout << temp -> value << " ";
temp = temp -> next;
} while (temp != head);
return 0;
}