真心虐心,昨天晚上从8点改到11点,自己测什么问题都没有,可就是不AC,于是就想格式方面的问题,后来还不对,一看去复制了一段别人的代码,替换了我中间的部分一测,AC了居然,于是终于知道了我是在哪一段出错的。
这个是我原来的代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cctype>
using namespace std;
char s[6][6];
int x, y;
int main()
{
freopen("New Text Document.txt","r",stdin);
freopen("Output.txt","w",stdout);
ios::sync_with_stdio(false);
string str, order;
int p = 0;
while(1)
{
if(p != 0) cin.get();//´¦ÀíÖ¸ÁîÐÐÄ©»Ø³µ
memset(s, 0, sizeof(s));
str.clear();
getline(cin, str);//puzzleÀïÓпոñ£¬ÒªÓøögetline¶Áµ½stringÀïÈ»ºóÔÚתµ½¶þάÊý×éÖУ¬´Ë´¦½ö¶ÁÈëÒ»ÐÐ
if(str[0] == 'Z' ) break;
if(p != 0) printf("\n");//´òӡÿ×éÊý¾Ý¼äµÄ¿ÕÐÐ
for(int j = 0; j < 5; j++)
{
s[0][j] = str[j];
if(s[0][j] == ' ')
{
x = 0;
y = j;
}
}
for(int i = 1; i < 5; i++)
{
str.clear();
getline(cin, str);//ͨ¹ýÑ»·½«Ê£Óà4ÐжÁÈë
for(int j = 0; j < 5; j++)
{
s[i][j] = str[j];
if(s[i][j] == ' ')
{
x = i;
y = j;
}
}
}
//½«orderÇå¿Õ£¬²¢ÇÒ¶ÁÈëËùÓеÄÖ¸Áî
order.clear();
while(1)
{
string appendix;
cin>>appendix;
order += appendix;
int len = appendix.length();
if(appendix[len-1] == '0') break;
}
int len = order.length();
bool flag = true;
for(int i = 0; i < len-1; i++)
{
switch(order[i])
{
case 'A':
if(x == 0) flag = false;
else s[x][y] = s[--x][y];
break;
case 'B':
if(x == 4) flag = false;
else s[x][y] = s[++x][y];
break;
case 'R':
if(y == 4) flag = false;
else s[x][y] = s[x][++y];
break;
case 'L':
if(y == 0) flag = false;
else s[x][y] = s[x][--y];
break;
case '0': case '\n': break;
default: flag = false;
}
if(!flag) break;
}
s[x][y] = ' ';//***********
//Êä³ö
printf("Puzzle #%d:\n",++p);
if(flag)
for(int i = 0; i < 5; i++)
printf("%c %c %c %c %c\n",s[i][0],s[i][1],s[i][2],s[i][3],s[i][4]);
else printf("This puzzle has no final configuration.\n");
}
return 0;
}
之前代码我在switch中没改空格,最后在*******号语句处加了改空格,但就是不对,目前仍不知道为什么。
这个 是AC代码。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cctype>
using namespace std;
char s[6][6];
int x, y;
//const char* turns = "ABLR";
//int dx[] = {-1,1,0,0};
//int dy[] = {0,0,-1,1};
//
//bool move_p(char turn)
//{
// int flag = 1;
// int t;
// if(turn == 'A') t =0;
// else if(turn == 'B') t =1;
// else if(turn == 'L') t =2;
// else if(turn == 'R') t =3;
// int xa,ya;
// xa = x + dx[t]; ya = y + dy[t];
// if(xa>=0&&xa<=4&&ya>=0&&ya<=4){
// s[x][y] = s[xa][ya];
// s[xa][ya] = ' ';
// x = xa; y =ya;
// }
// else flag = 0;
// if(flag) return true;
// else return false;
//}
int main()
{
freopen("New Text Document.txt","r",stdin);
freopen("Output.txt","w",stdout);
ios::sync_with_stdio(false);
string str, order;
int p = 0;
while(1)
{
if(p != 0) cin.get();//处理指令行末回车
memset(s, 0, sizeof(s));
str.clear();
getline(cin, str);//puzzle里有空格,要用getline读到string里再转到数組中
if(str[0] == 'Z' ) break;
if(p != 0) printf("\n");//打印每组数据之间的空行
for(int j = 0; j < 5; j++)
{
s[0][j] = str[j];
if(s[0][j] == ' ')
{
x = 0;
y = j;
}
}
for(int i = 1; i < 5; i++)
{
str.clear();
getline(cin, str);//读入剩余四行
for(int j = 0; j < 5; j++)
{
s[i][j] = str[j];
if(s[i][j] == ' ')
{
x = i;
y = j;
}
}
}
//清空order并读入所有指令
order.clear();
while(1)
{
string appendix;
cin>>appendix;
order += appendix;
int len = appendix.length();
if(appendix[len-1] == '0') break;
}
int len = order.length();
bool flag = true;
//下面这段for循环可以注释掉,然后替换成目前的所有注释部分,目前的注释部分是我从网上粘贴的
for(int i = 0; i < len-1; i++)
{
switch(order[i])
{
case 'A':
if(x == 0) flag = false;
else
{
s[x][y] = s[x-1][y];
s[--x][y] = ' ';
}
break;
case 'B':
if(x == 4) flag = false;
else
{
s[x][y] = s[x+1][y];
s[++x][y] = ' ';
}
break;
case 'R':
if(y == 4) flag = false;
else
{
s[x][y] = s[x][y+1];
s[x][++y] = ' ';
}
break;
case 'L':
if(y == 0) flag = false;
else {
s[x][y] = s[x][y-1];
s[x][--y] = ' ';
}
break;
default: flag = false;
}
if(!flag) break;
}
//s[x][y] = 0;
//for(int i=0;i<len-1;i++)
// {
// if(move_p(order[i])) continue;
// else { flag = false; break;}
// }
//打印
printf("Puzzle #%d:\n",++p);
if(flag)
for(int i = 0; i < 5; i++)
printf("%c %c %c %c %c\n",s[i][0],s[i][1],s[i][2],s[i][3],s[i][4]);
else printf("This puzzle has no final configuration.\n");
}
return 0;
}
这是我粘贴部分代码的原博主
http://blog.csdn.net/wowowoc/article/details/40059593
万分感谢。