2018.2.28【 UVa - 227 】解题报告(紫书练习题,模拟,输出格式)

【题目链接】UVa:点击打开链接   VJ:点击打开链接

【题目大意】

给你一个5*5的棋盘,被24个字母和1个空格填满。A、B、L、R分别表示空格向上向下向左向右移动的命令,给出初始棋盘,给出一段命令,求出最终棋盘的样子。

【解题思路】

注意空格在边界的情况,模拟棋盘移动,每一次命令交换空格与上下左右之一空格中的字母,有任一一条不合理的命令,便可以判断走法有问题。

【解题代码】

#include 
#include 
#include 
using namespace std;
const int maxn=3e4+5;
int vis[maxn];
int yushu[maxn];
int up,down;
int main()
{
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
	int kcase=0;
	while(~scanf("%d%d",&up,&down))
	{
		memset(vis,0,sizeof(vis));
		memset(yushu,0,sizeof(yushu));
		//输出相除的形式
		printf("%d/%d = ",up,down); 
		
		//先输出整数部分
		int circle=0;
		int z=up/down;
		yushu[0]=z;
		int yu=up%down*10;
		if(yu==0)//判断是否恰整除 
		{
			printf("%d.(0)\n",z);
			printf("   1 = number of digits in repeating cycle\n");
			continue;
		}
		else//不恰好整除 
		{
			int i=1;
			while(yu)//有限循环则退出 
			{
				if(vis[yu])
				{
					circle=i-vis[yu];//i是当前位置,vis[yu]是上一次出现该被除数的位置。 
					break;
				}
				vis[yu]=i; //储存第一次出现该值得位置。 
				yushu[i]=yu/down;
				i++;
				yu=yu%down*10;
			}
			printf("%d.",yushu[0]);
			if(!yu)
			{
				for(int j=1;j=50)
					{
						printf("...");
						break;
					}
					printf("%d",yushu[j]);
					count++;
				}
				printf(")\n");
				printf("   %d = number of digits in repeating cycle\n\n",circle);
			} 
		}
		
	}
	return 0;
} 

【收获与反思】

1.多思考多见识。

2.学会知识的融会贯通。

你可能感兴趣的:(ACM,UVa,模拟,UVA)