首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【培训考试题】有趣的游戏(easy)

2012-11-05 
【培训试题】有趣的游戏(easy)Description有一天津津和乖乖正在一起玩耍,忽然乖乖拿出了一些牌对津津说,我们

【培训试题】有趣的游戏(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;}

热点排行