-UVa10935题:Trowing cards away1解答及简单分析

                       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("
Remaining card: %d
",a[head]);
26     }
27     return 0;
28 }
原文地址:https://www.cnblogs.com/x512149882/p/4653644.html