【培训试题】有趣的游戏(easy)
Description
有一天津津和乖乖正在一起玩耍,忽然乖乖拿出了一些牌对津津说,我们来一起玩一个游戏,怎么样?津津爽快的答应了。
乖乖说:“有N张牌,记为1,2,...,N,应当怎样排放,才能使:打开第一张是1,拿出1后,然后拿两张依次放在末尾;打开上面一张,刚好是2,拿出2后,再拿两张依次放在末尾;打开上面一张,刚好是3;如此继续下去,直至打开最后一张是N。”
请问原来这些牌是怎么排列的?
Input
(a.in)n的值是大于等于0而小于等于52的.
Output
(a.out)原来这些牌的排列
Sample Input
4
Sample Output
1 3 4 2
#include <stdio.h>#define MAXNUM 1000typedef struct {int prev; //保存最原始的位置int data; //保存数据}puke;//思路:定义一个结构体 prev表示原来的初始位置,在把牌后移动的过程中把初始位置依次传递下去//data表示数据,最后对初始位置进行排序,输出数组int main(){int i, j, location, n;puke a[MAXNUM];scanf("%d", &n);if(n < 0 || n > 52)return 0;for(i = 0; i < n; i++){a[i].prev = i + 1;}location = n;for(i = 0, j = 1; j <=n; i +=3, j++){a[i].data = j;a[location].prev = a[i + 1].prev;a[location + 1].prev = a[i + 2].prev;location += 2;}a[0].prev = 1;for(i = 1; i <=n; i++){for(j = 0; j <= 3 * (n - 1); j+=3){if(a[j].prev == i){printf("%d ", a[j].data);break;}}}printf("\n");return 0;}