模拟类型题;队列
思想:对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" ); } }