Trowing cards away
原题题意:
有n张牌,从第一张牌(位于最上面head的牌)开始,从上往下一次编号为1到n.当至少还剩两张牌的时候进行以下操作:将第一张牌扔掉,然后将新的第一张牌放到整叠牌的最后(变为tail)。 输如每行包含一个n,输出每次扔掉的牌及最后剩下的牌。要求:n<=50
题意分析及程序简析:
定义一个至少2n-1大小的数组, 为避免出错可将数组空间稍微开大点。设置一个变量head和tail下标记录输入数组的第一个和最后一个数据,每次将其往后移一个位置指向后一个数组元素。
案列输出如下:
intput:
7
output:
Discarded Cards:1,3,5,7,4,2
Remaining Cards:6
程序代码如下:
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int a[1000]; 6 7 int main() 8 { 9 int n; 10 while (cin >> n && n) 11 { 12 for (int i = 0; i <= n; ++ i) 13 a[i] = i; 14 15 int head = 1,tail = n, flag = 1; 16 printf("Discarded cards:"); 17 while (head < tail) 18 { 19 if (!flag) 20 printf(","); 21 printf(" %d",a[head ++]); 22 a[++ tail] = a[head ++]; 23 flag = 0; 24 } 25 printf("\nRemaining card: %d\n",a[head]); 26 } 27 return 0; 28 }
时间: 2024-11-09 08:25:21