⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3020068_ac_0ms_160k.c

📁 北大大牛代码 1240道题的原代码 超级权威
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int size, len;
char ch, op[100], mes[10001];

void OLE()
{
	while(1)
	{
		puts("I Love Shengqi");
	}
}

void shake()
{
	int i, j;

	for(i = 0; i < size; i++)
	{
		if(i%2==0)
		{
			ch = mes[i];
			for(j = i+size; j < len; j+=size)
			{
				mes[j-size] = mes[j];
			}
			mes[j-size] = ch;
		}
		else
		{
			ch = mes[len-size+i];
			for(j = len-2*size+i; j >= 0; j-=size)
			{
				mes[j+size] = mes[j];
			}
			mes[j+size] = ch;
		}
	}
}

void rattle()
{
	int i, j;

	for(i = 0; i < size; i++)
	{
		if(i%2==0)
		{
			ch = mes[i*size+size-1];
			for(j = i*size+size-2; j > i*size+size-2-(size-1); j--)
			{
				mes[j+1] = mes[j];
			}
			mes[j+1] = ch;
		}
		else
		{
			ch = mes[i*size];
			for(j = i*size+1; j < i*size+1+(size-1); j++)
			{
				mes[j-1] = mes[j];
			}
			mes[j-1] = ch;
		}
	}
}

void roll()
{
	int i, j, l = 0;
	char str[101][101];

	for(i = 0; i < size; i++)
	{
		for(j = 0; j < size; j++)
		{
			str[i][j] = mes[l++];
		}
		str[i][j] = '\0';
	}
	for(i = 0, l = size; i < size/2; i++,l-=2)
	{
		ch = str[i][i];
		if(i%2==0)
		{
			for(j = i+1; j < i+l; j++)
			{
				str[j-1][i] = str[j][i];
			}
			for(j = i+1; j < i+l; j++)
			{
				str[i+l-1][j-1] = str[i+l-1][j];
			}
			for(j = i+l-2; j >= i; j--)
			{
				str[j+1][i+l-1] = str[j][i+l-1];
			}
			for(j = i+l-2; j > i; j--)
			{
				str[i][j+1] = str[i][j];
			}
			str[i][i+1] = ch;
		}
		else
		{
			for(j = i+1; j < i+l; j++)
			{
				str[i][j-1] = str[i][j];
			}
			for(j = i+1; j < i+l; j++)
			{
				str[j-1][i+l-1] = str[j][i+l-1];
			}
			for(j = i+l-2; j >= i; j--)
			{
				str[i+l-1][j+1] = str[i+l-1][j];
			}
			for(j = i+l-2; j > i; j--)
			{
				str[j+1][i] = str[j][i];
			}
			str[i+1][i] = ch;
		}
	}
	strcpy(mes,"");
	for(i = 0; i < size; i++)
	{
		strcat(mes,str[i]);
	}
}

void enc(int i)
{
	switch(op[i])
	{
	case 'S': shake();break;
	case 'R': rattle();break;
	case 'L': roll();break;
	default: OLE();
	}
}

int main()
{
	int i;

	while(gets(op)!=NULL)
	{
		gets(mes);
		size = atoi(op);
		if(size==0)
		{
			size = 100;
		}
		len = strlen(mes);
		if(len < size*size)
		{
			for(i = len, ch = 'A'; i < size*size; i++,ch++)
			{
				if(ch > 'Z')
				{
					ch = 'A';
				}
				mes[i] = ch;
			}
			mes[i] = '\0';
		}
		len = size*size;
		for(i = 2; op[i]!='\0'; i++)
		{
			enc(i);
		}
		for(i = 0; mes[i]!='\0'; i++)
		{
			if(mes[i] >= 'a')
			{
				mes[i] -= ' ';
			}
		}
		puts(mes);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -