본문 바로가기

Solutions/Mr.K's Solution

PKU 3032. Card Trick. [판정:AC]


문제 자주 못풀어서 미안; -_-a



#include 
#include 

int main()
{
	int n;
	int cards;
	int *linear;
	int i, j;
	int ind;

	scanf( "%d", &n );

	while( n > 0 )
	{
		scanf( "%d", &cards );

		linear = (int *) calloc( cards, sizeof(int) );
		
		ind = 0;

		for( i = 1; i <= cards; i++ )
		{
			j = 0;

			while( linear[ind] != 0 )
			{
				ind = (ind + 1) % cards;
			}

			while(1)
			{
				if( linear[ind] == 0 )
				{
					ind = (ind + 1) % cards;
					j++;
					if( j == i )
					{
						while( linear[ind] != 0 )
						{
							ind = (ind + 1) % cards;
						}

						linear[ind] = i;
						break;
					}
				}
				else
				{
					ind = (ind + 1) % cards;
				}
			}
		}

		for( i = 0; i < cards; i++ )
		{
			printf( "%d%c", linear[i], (i == cards-1)? '\n': ' ' );
		}

		free( linear );

		n--;
	}

	return 0;
}