标签:
题目:给n张牌放成一叠,从上到下编号从1~n,当至少还有两张牌时,丢弃最上面的牌,第二张牌放到最下面,
重复这个过程直到只剩下一张牌,输出丢弃牌的序列以及最后剩下的牌。
分析:模拟、初级DS。直接利用队列模拟即可。
说明:注意输出格式,一张牌没有丢掉的牌╮(╯▽╰)╭。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int Q[10000]; int main() { int n; while (cin >> n && n) { for (int i = 0; i <= n; ++ i) Q[i] = i; int head = 1,tail = n,first = 1; printf("Discarded cards:"); while (head < tail) { if (!first) printf(","); printf(" %d",Q[head ++]); Q[++ tail] = Q[head ++]; first = 0; } printf("\nRemaining card: %d\n",Q[head]); } return 0; }
UVa 10935 - Throwing cards away I
标签:
原文地址:http://blog.csdn.net/mobius_strip/article/details/45157587