题意:输入5x5的字符串,输入操作,要求输出完成操作后的字符串。

注意:①输入的操作执行可能会越界,如果越界则按题目要求输出不能完成的语句。

②除了最后一次的输出外,其他输出均要在后面空一行。

③操作的最后一个换行符可能会占据str[0],需要用c来getchar()

  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "string.h"
  4. int noConfig=,x,y,findEmpty=,count=,cmdcount=;
  5. //noConfig是指令不能执行(越界时),findEmpty是一边输入一边查找空字符的时候用,1为找到
  6. //count是puzzle的计数,cmdcount是命令的计数
  7. char str[][],cmd[];
  8. //str是输入的字符串,cmd是操作指令
  9. int judge(int exi,int exj)//判断越界
  10. {
  11. if(exi<||exi>=||exj<||exj>=)
  12. {
  13. return -;
  14. }
  15. return ;
  16. }
  17.  
  18. int swap(int i,int j,char cmd)//str[exi][exj]交换str[i][j]中的空字符
  19. {
  20. int exi,exj;
  21. // printf(" i=%d j=%d cmd=%c\n",i,j,cmd);
  22. switch (cmd)
  23. {
  24. case 'A':
  25. exi=i-;
  26. exj=j;
  27. break;
  28. case 'B':
  29. exi=i+;
  30. exj=j;
  31. break;
  32. case 'L':
  33. exi=i;
  34. exj=j-;
  35. break;
  36. case 'R':
  37. exi=i;
  38. exj=j+;
  39. break;
  40. }
  41. // printf("exi=%d exj=%d\n",exi,exj);
  42. //判断
  43. if(judge(exi,exj)==-)
  44. {
  45. noConfig=;
  46. return -;
  47. }
  48. //交换
  49. str[y][x]=str[exi][exj];
  50. // printf(" Y,X:str[%d][%d]=%c\n",y,x,str[y][x]);
  51. str[exi][exj]=' ';
  52. // printf(" EXI,EXJ:str[%d][%d]=%c\n",y,x,str[exi][exj]);
  53. y=exi;
  54. x=exj;
  55. // printf("after change:\n");
  56. // for(i=0;i<5;i++)
  57. // {
  58. // for(j=0;j<5;j++)
  59. // {
  60. // printf("%c",str[i][j]);
  61. // }
  62. // printf("\n");
  63. // }
  64. return ;
  65. }
  66.  
  67. int main()
  68. {
  69. char c;
  70. int i,j,k;
  71. while()
  72. {
  73. noConfig=;
  74. cmdcount=;
  75. memset(str,'\0',sizeof(str));
  76. for(i=;i<;i++)
  77. {
  78. gets(str[i]);
  79. if(str[][]=='Z')
  80. {
  81. return ;
  82. }
  83. // for(j=0;j<5;j++)//边输入边查找
  84. // {
  85. // if(str[i][j]==' '||str[i][j]=='\0')
  86. // {
  87. // x=j;
  88. // y=i;
  89. // findEmpty=1;
  90. //// printf("Y=%d X=%d\n",y,x);
  91. // }
  92. // }
  93. }
  94. for(i=;i<;i++)
  95. {
  96. for(j=;j<;j++)
  97. {
  98. if(str[i][j]==' '||str[i][j]=='\0')
  99. {
  100. x=j;
  101. y=i;
  102. // printf("Y=%d X=%d\n",y,x);
  103. }
  104. }
  105. }
  106. count++;
  107. while((c=getchar())!='')
  108. {
  109. cmd[cmdcount++]=c;
  110. }
  111. c=getchar();//用c取最后的换行符,不然str[0]会被换行符占据
  112. for(i=;i<cmdcount;i++)
  113. {
  114. if(swap(y,x,cmd[i])==-)
  115. break;
  116. }
  117. // fflush(stdin);写了这个就TIE
  118. //输出结果
  119. if(count!=)
  120. printf("\n");//注意这里,除最后一个输出外,其他的输完后都空一行
  121. if(noConfig==)//无结果
  122. {
  123. printf("Puzzle #%d:\n",count);
  124. printf("This puzzle has no final configuration.\n");
  125. }
  126. else
  127. {
  128. printf("Puzzle #%d:\n",count);
  129. //输出
  130. for(i=;i<;i++)
  131. {
  132. for(j=;j<;j++)
  133. {
  134. if(j!=)
  135. printf(" ");
  136. printf("%c",str[i][j]);
  137. }
  138. printf("\n");
  139. }
  140. }
  141. }
  142. return ;
  143. }

UVA 277 Puzzle的更多相关文章

  1. uva 227 Puzzle

     Puzzle  A children's puzzle that was popular 30 years ago consisted of a 5x5 frame which contained ...

  2. UVA 227 Puzzle - 输入输出

    题目: acm.hust.edu.cn/vjudge/roblem/viewProblem.action?id=19191 这道题本身难度不大,但输入输出时需要特别小心,一不留神就会出问题. 对于输入 ...

  3. UVA 227 Puzzle(基础字符串处理)

    题目链接: https://cn.vjudge.net/problem/UVA-227 /* 问题 输入一个5*5的方格,其中有一些字母填充,还有一个空白位置,输入一连串 的指令,如果指令合法,能够得 ...

  4. uva 227 Puzzle (UVA - 227)

    感慨 这个题实在是一个大水题(虽然说是世界决赛真题),但是它给出的输入输出数据,标示着老子世界决赛真题虽然题目很水但是数据就能卡死你...一直pe pe直到今天上午AC...无比感慨...就是因为最后 ...

  5. UVA_Digit Puzzle UVA 12107

    If you hide some digits in an integer equation, you create a digit puzzle. The figure below shows tw ...

  6. uva live 12846 A Daisy Puzzle Game

    假设下一个状态有必败.那么此时状态一定是必胜,否则此时状态一定是必败 状压DP #include<iostream> #include<map> #include<str ...

  7. UVA 12849 Mother’s Jam Puzzle( 高斯消元 )

    题目: http://uva.onlinejudge.org/external/128/12849.pdf #include <bits/stdc++.h> using namespace ...

  8. Puzzle UVA - 227 PE代码求大佬指点

    ​ A children's puzzle that was popular 30 years ago consisted of a 5×5 frame which contained 24 smal ...

  9. UVA - 12107 Digit Puzzle(数字谜)(IDA*)

    题意:给出一个数字谜,要求修改尽量少的数,使修改后的数字谜只有唯一解.空格和数字可以随意替换,但不能增删,数字谜中所有涉及的数必须是没有前导零的正数.输入数字谜一定形如a*b=c,其中a.b.c分别最 ...

随机推荐

  1. extra过滤

    extra extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None) 有些 ...

  2. anaconda中的包如何传到pycharm中使用?

    在pycharm的setting中设置 在project interpreter 中的 existing environment 中选择 anaconda3安装目录下的的 python.exe 就可以 ...

  3. 基于Manhattan最小生成树的莫队算法

    点u,v的Manhattan距离:distance(u,v)= |x2-x1|+|y2-y1| Manhattan最小生成树:边权值为两个点Manhattan距离的最小生成树. 普通算法:prim复杂 ...

  4. Android学习基础部分

    今天是放寒假的第四天,这几天加上放假前总共弄了一些Android编程的基础部分,比如下载sdk.配置环境.下载Eclipse的插件(ADT).下载Android Studio.VirtualBox.G ...

  5. vsftpd中的local_umask和anon_umask

    umask是在linux中常见的一个东西,它其实是一个掩码.当然,也有umask这样一个命令,它是对用户建立的文件的默认属性的定义.该 定义为: 假设umask为022,则对于一个文件夹的话,它的默认 ...

  6. shiro 单点登录原理 实例

    原创 2017年02月08日 17:39:55 4006 Shiro 1.2开始提供了Jasig CAS单点登录的支持,单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即 ...

  7. 数据库解析IP,时间戳

    #解析IP SELECT INET_NTOA('168494269'); #解析时间戳 SELECT FROM_UNIXTIME('1505458308');

  8. SQL查询数据并插入新表

    SQL查询数据并插入新表 --如果接受数据导入的表已经存在 insert into 表 select * from tablename --如果导入数据并生成表 select * into 表 fro ...

  9. ES优化总结

    ES优化总结(特别是在bulk大量数据到ES的时候) https://blog.csdn.net/chenxun_2010/article/details/78602795 将 ELASTICSEAR ...

  10. [转] mongoose学习笔记(超详细)

    名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为.Model的每一个实例(ins ...