魔术师翻牌(循环链表)

版权声明:根号v587版权所有 https://blog.csdn.net/hcmdghv587/article/details/82155685

魔术师翻牌:魔术师把扑克中的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;
}

猜你喜欢

转载自blog.csdn.net/hcmdghv587/article/details/82155685