nyoj714Card Trick 【模拟】+【队列】

模拟类型题;队列

思想:对n有n次循环(实际是不要循环),对n和n-1要n-1次循环(实际是n-1%2),对n和n-1和n-2要n-2次循环(实际是n-1%3)。。。

到循环的时候纠结了,怎么想都想不出来,只好请教大神,终于弄懂了;

代码:

 

#include<stdio.h> int a[15]; void move( int bot, int top, int n )//bot是对尾,top是对首, n是实际循环的次数; {  int i,tt, t;  while( n -- )  {   t = a[top];//保存最高位   for( i = bot; i <= top; i ++ )//仔细思考一下,   {    tt = a[i];//保存移动的目的位的值    a[i] = t;    t = tt;   }  } } int main() {  int top, bot, k, n, i;  scanf( "%d", &k );  while( k -- )  {   scanf( "%d", &n);   for( i = 1; i <= n; i ++ )    a[i] = i;   bot = top = n;   for( i = n; i >= 1; i -- )   {    move( bot, top, i%(top-bot+1) );    bot --;   }    for( i = 1; i <= n; i ++ )     printf( "%d ", a[i] );    printf( "\n" );  } } 

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值