UVA 277 Puzzle
题意:输入5x5的字符串,输入操作,要求输出完成操作后的字符串。
注意:①输入的操作执行可能会越界,如果越界则按题目要求输出不能完成的语句。
②除了最后一次的输出外,其他输出均要在后面空一行。
③操作的最后一个换行符可能会占据str[0],需要用c来getchar()
- #include "stdio.h"
- #include "stdlib.h"
- #include "string.h"
- int noConfig=,x,y,findEmpty=,count=,cmdcount=;
- //noConfig是指令不能执行(越界时),findEmpty是一边输入一边查找空字符的时候用,1为找到
- //count是puzzle的计数,cmdcount是命令的计数
- char str[][],cmd[];
- //str是输入的字符串,cmd是操作指令
- int judge(int exi,int exj)//判断越界
- {
- if(exi<||exi>=||exj<||exj>=)
- {
- return -;
- }
- return ;
- }
- int swap(int i,int j,char cmd)//str[exi][exj]交换str[i][j]中的空字符
- {
- int exi,exj;
- // printf(" i=%d j=%d cmd=%c\n",i,j,cmd);
- switch (cmd)
- {
- case 'A':
- exi=i-;
- exj=j;
- break;
- case 'B':
- exi=i+;
- exj=j;
- break;
- case 'L':
- exi=i;
- exj=j-;
- break;
- case 'R':
- exi=i;
- exj=j+;
- break;
- }
- // printf("exi=%d exj=%d\n",exi,exj);
- //判断
- if(judge(exi,exj)==-)
- {
- noConfig=;
- return -;
- }
- //交换
- str[y][x]=str[exi][exj];
- // printf(" Y,X:str[%d][%d]=%c\n",y,x,str[y][x]);
- str[exi][exj]=' ';
- // printf(" EXI,EXJ:str[%d][%d]=%c\n",y,x,str[exi][exj]);
- y=exi;
- x=exj;
- // printf("after change:\n");
- // for(i=0;i<5;i++)
- // {
- // for(j=0;j<5;j++)
- // {
- // printf("%c",str[i][j]);
- // }
- // printf("\n");
- // }
- return ;
- }
- int main()
- {
- char c;
- int i,j,k;
- while()
- {
- noConfig=;
- cmdcount=;
- memset(str,'\0',sizeof(str));
- for(i=;i<;i++)
- {
- gets(str[i]);
- if(str[][]=='Z')
- {
- return ;
- }
- // for(j=0;j<5;j++)//边输入边查找
- // {
- // if(str[i][j]==' '||str[i][j]=='\0')
- // {
- // x=j;
- // y=i;
- // findEmpty=1;
- //// printf("Y=%d X=%d\n",y,x);
- // }
- // }
- }
- for(i=;i<;i++)
- {
- for(j=;j<;j++)
- {
- if(str[i][j]==' '||str[i][j]=='\0')
- {
- x=j;
- y=i;
- // printf("Y=%d X=%d\n",y,x);
- }
- }
- }
- count++;
- while((c=getchar())!='')
- {
- cmd[cmdcount++]=c;
- }
- c=getchar();//用c取最后的换行符,不然str[0]会被换行符占据
- for(i=;i<cmdcount;i++)
- {
- if(swap(y,x,cmd[i])==-)
- break;
- }
- // fflush(stdin);写了这个就TIE
- //输出结果
- if(count!=)
- printf("\n");//注意这里,除最后一个输出外,其他的输完后都空一行
- if(noConfig==)//无结果
- {
- printf("Puzzle #%d:\n",count);
- printf("This puzzle has no final configuration.\n");
- }
- else
- {
- printf("Puzzle #%d:\n",count);
- //输出
- for(i=;i<;i++)
- {
- for(j=;j<;j++)
- {
- if(j!=)
- printf(" ");
- printf("%c",str[i][j]);
- }
- printf("\n");
- }
- }
- }
- return ;
- }
UVA 277 Puzzle的更多相关文章
- uva 227 Puzzle
Puzzle A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained ...
- UVA 227 Puzzle - 输入输出
题目: acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191 这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题. 对于输入 ...
- UVA 227 Puzzle(基础字符串处理)
题目链接: https://cn.vjudge.net/problem/UVA-227 /* 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 的指令,如果指令合法,能够得 ...
- uva 227 Puzzle (UVA - 227)
感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...
- UVA_Digit Puzzle UVA 12107
If you hide some digits in an integer equation, you create a digit puzzle. The figure below shows tw ...
- uva live 12846 A Daisy Puzzle Game
假设下一个状态有必败.那么此时状态一定是必胜,否则此时状态一定是必败 状压DP #include<iostream> #include<map> #include<str ...
- UVA 12849 Mother’s Jam Puzzle( 高斯消元 )
题目: http://uva.onlinejudge.org/external/128/12849.pdf #include <bits/stdc++.h> using namespace ...
- Puzzle UVA - 227 PE代码求大佬指点
A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...
- UVA - 12107 Digit Puzzle(数字谜)(IDA*)
题意:给出一个数字谜,要求修改尽量少的数,使修改后的数字谜只有唯一解.空格和数字可以随意替换,但不能增删,数字谜中所有涉及的数必须是没有前导零的正数.输入数字谜一定形如a*b=c,其中a.b.c分别最 ...
随机推荐
- extra过滤
extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些 ...
- anaconda中的包如何传到pycharm中使用?
在pycharm的setting中设置 在project interpreter 中的 existing environment 中选择 anaconda3安装目录下的的 python.exe 就可以 ...
- 基于Manhattan最小生成树的莫队算法
点u,v的Manhattan距离:distance(u,v)= |x2-x1|+|y2-y1| Manhattan最小生成树:边权值为两个点Manhattan距离的最小生成树. 普通算法:prim复杂 ...
- Android学习基础部分
今天是放寒假的第四天,这几天加上放假前总共弄了一些Android编程的基础部分,比如下载sdk.配置环境.下载Eclipse的插件(ADT).下载Android Studio.VirtualBox.G ...
- vsftpd中的local_umask和anon_umask
umask是在linux中常见的一个东西,它其实是一个掩码.当然,也有umask这样一个命令,它是对用户建立的文件的默认属性的定义.该 定义为: 假设umask为022,则对于一个文件夹的话,它的默认 ...
- shiro 单点登录原理 实例
原创 2017年02月08日 17:39:55 4006 Shiro 1.2开始提供了Jasig CAS单点登录的支持,单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即 ...
- 数据库解析IP,时间戳
#解析IP SELECT INET_NTOA('168494269'); #解析时间戳 SELECT FROM_UNIXTIME('1505458308');
- SQL查询数据并插入新表
SQL查询数据并插入新表 --如果接受数据导入的表已经存在 insert into 表 select * from tablename --如果导入数据并生成表 select * into 表 fro ...
- ES优化总结
ES优化总结(特别是在bulk大量数据到ES的时候) https://blog.csdn.net/chenxun_2010/article/details/78602795 将 ELASTICSEAR ...
- [转] mongoose学习笔记(超详细)
名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为.Model的每一个实例(ins ...