数据结构_yjjsj(伊姐姐数字游戏)

问题描述

伊姐姐热衷于各类数字游戏, 24 点、 2048、数独等轻轻松松毫无压力。一
日,可爱的小姐姐邀请伊姐姐一起玩一种简单的数字 game,游戏规则如下:
一开始桌上放着 n 张数字卡片,从左到右按数字 1-n 放置,小姐姐按以下步
骤取卡片
小姐姐取出最左边的一张牌,藏于袖中;
小姐姐将此时剩余卡牌的最左边的 p 张移到最右边, 假设桌上的牌为 1 2 3 4
5,移动最左边的两张卡片后结果为 3 4 5 1 2。 注意当桌上卡片数量小于 p 时不
进行这步操作。
所有卡牌都被藏起来以后,游戏结束。
这是个十分简单的数字 game, 然而伊姐姐因为紧张丧失游戏能力, 你能帮
助伊姐姐统计, 小姐姐第 k 次,第 2*k i*k (i<=n/k)藏于袖中的卡片吗?


★数据输入
输入第一行为三个正整数 n(1<=n<=100000),p(0<=p<=10),k(0<k<=100),含
义在题目中给出。


★数据输出
输出为两行,第一行输出你总共要输出的卡片数量 m
第二行 m 个数, 按顺序输出小姐姐第 k 次,第 2*k m*k 次藏的卡片。

输入示例 输出示例
6 3 2 3
5 6 3


输入示例 输出示例
10 1 3 3
5 2 8


思路

  测试数据较小,暴力

 

code

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 #include <queue>
 5 
 6 int main()
 7 {
 8     int i,j;
 9     int n,p,k;
10     bool first=true;
11     
12     scanf("%d %d %d",&n,&p,&k);
13     printf("%d\n",n/k);
14     
15     queue<int> q;
16     for(i=1;i<=n;i++)
17         q.push(i);
18     
19     for(i=1; i<=n; i++)
20     {
21         if(i%k==0)
22         {
23             if(first)
24             {
25                 first = false;
26                 printf("%d",q.front());
27             }    
28             else
29                 printf(" %d",q.front());
30         }
31         q.pop();
32         if(q.size()>p)//(q.size()>=p)
33         {
34             for(j=1;j<=p;j++)
35             {
36                 q.push(q.front());
37                 q.pop();
38             }
39         }
40     }
41     
42     return 0;
43 }

 

posted @ 2017-10-16 11:01  cbattle  阅读(321)  评论(0编辑  收藏  举报