目录
提示:思路分析:
提示:也可以采用Swing解决
1.题目描述
猫和老鼠在10×10的方格中运动(如图3-6),例如:
*...*.....
......*...
...*...*..
..........
...*.C....
*.....*...
...*......
..M......*
...*.*....
.*.*......
C=猫(CAT)
M=老鼠(MOUSE)
- = 障碍物 .= 空地
猫和老鼠每秒中走一格,如果在某一秒末它们在同一格中,我们称它们“相遇”。
注意:“对穿”是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,就用1秒的时间做一个右转90°。一开始它们都面向北方。
2.输出
编程计算多少秒以后他们相遇
3.代码部分
代码如下(示例):
public class Main {
public static void main(String[] args)
{
char[][] map = new char[10][10];
int dir_x[] = {-1,0,1,0},dir_y[]={0,1,0,-1};
for(int i = 0;i < 10;i++)
for(int j = 0;j < 10;j++)
{
if((i==0&&j==0)||(i==0&&j==4)||(i==1&&j==6)||(i==2&&j==3)||(i==2&&j==7)||(i==4&&j==3)||(i==5&&j==0)||(i==5&&j==6)||(i==6&&j==3)||(i==7&&j==9)||(i==8&&j==3)||(i==8&&j==5)||(i==9&&j==1)||(i==9&&j==3))
map[i][j]='*';
else
map[i][j]='.';
}
int m_x=7,m_y=2,c_x=4,c_y=5,dir_m=0,dir_c=0,count=0;
while(true)
{
if(m_x==c_x&&m_y==c_y)
break;
m_x+=dir_x[dir_m];
m_y+=dir_y[dir_m];
if(m_x<0||m_y<0||m_x>9||m_y>9||map[m_x][m_y]=='*')
{
m_x-=dir_x[dir_m];
m_y-=dir_y[dir_m];
dir_m=(dir_m+1)%4;
}
c_x+=dir_x[dir_c];
c_y+=dir_y[dir_c];
if(c_x<0||c_y<0||c_x>9||c_y>9||map[c_x][c_y]=='*')
{
c_x-=dir_x[dir_c];
c_y-=dir_y[dir_c];
dir_c=(dir_c+1)%4;
}
count++;
}
System.out.println(count);
}
}
5.答案
49