EMC面试题目Word文档格式.docx

上传人:b****5 文档编号:19422173 上传时间:2023-01-06 格式:DOCX 页数:6 大小:16.25KB
下载 相关 举报
EMC面试题目Word文档格式.docx_第1页
第1页 / 共6页
EMC面试题目Word文档格式.docx_第2页
第2页 / 共6页
EMC面试题目Word文档格式.docx_第3页
第3页 / 共6页
EMC面试题目Word文档格式.docx_第4页
第4页 / 共6页
EMC面试题目Word文档格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

EMC面试题目Word文档格式.docx

《EMC面试题目Word文档格式.docx》由会员分享,可在线阅读,更多相关《EMC面试题目Word文档格式.docx(6页珍藏版)》请在冰豆网上搜索。

EMC面试题目Word文档格式.docx

#G#G###

#######

#G#####

两个球相邻是不能动的。

中间一定要有至少一个的空格。

当碰撞过后,只有一个球在棋盘上为有解。

否则无解。

每次选择任意一个球开始运动,碰撞完成后,可以选择任意剩下小球开始运动。

请写出一个程序,任意初始化棋盘上的小球,然后判断是否有解,有解打印出球移动步骤,否则输入无解。

提供一些逻辑,大家讨论。

①感觉是推箱子+动量守恒,每当发生箱子被推出界外,则必须再手动给予一个动量。

②还是递归来解(可能存在多个解)

手动给予任意球任意方向(4个方向)一动量,满足③的递归条件则继续迭代,否则当前无解返回。

再循环下一个球,只有到最后满足有解时才反向打出所有运动轨迹(所以每一步运动轨迹必须保存)。

③递归的条件是:

1.至少在某行(列)上存在两个或两个以上的球,且其行(列)坐标差>

1

2.至少存在两个或两个以上的球,其行(列)的坐标差=1

importjava.util.Random;

publicclassMain{

privateStringBuildersolution=newStringBuilder();

publicstaticvoidmain(String[]args){

Mainmain=newMain();

//main.doHit(main.generateTable(5,5,4));

boolean[][]table=newboolean[5][5];

table[0][0]=true;

table[2][0]=true;

table[3][0]=true;

table[2][4]=true;

table[0][3]=true;

System.out.println("

tableis:

\n"

+main.getTableString(table));

main.doHit(table);

if(main.solution.length()==0){

Thereisnotanysolution"

);

}else{

main.solution.insert(0,"

Thereisasolution.\n"

System.out.println(main.solution.toString());

}

publicboolean[][]generateTable(introwSize,intcolSize,intnums){

boolean[][]table=newboolean;

Randomrandom=newRandom();

while(nums!

=0){

intx=random.nextInt(rowSize);

inty=random.nextInt(colSize);

if(table==true){

continue;

table=true;

nums--;

Newgeneratetableis:

System.out.println(getTableString(table));

returntable;

publicbooleandoHit(boolean[][]table){

for(inti=0;

i<

table.length;

i++){

for(intj=0;

j<

j++){

if(table){

if(goUp(table,i,j)){

returntrue;

if(goDown(table,i,j)){

if(goLeft(table,i,j)){

if(goRight(table,i,j)){

returnfalse;

privatebooleangoUp(boolean[][]table,inti,intj){

table=getNewCopy(table);

booleandidHit=false;

StringBuildersb=newStringBuilder();

sb.append("

theballat("

).append(i).append("

"

).append(j).append(

"

)hittheballbyupgoing."

if(i-2>

=0&

&

!

table){

for(intk=i-2;

k>

=0;

k--){

didHit=true;

table=false;

i=k;

Afterhit,thenewtableis:

\n"

).append(

getTableString(table));

booleanresult=checkAndDo(table,didHit);

if(result){

solution.insert(0,sb.toString());

returnresult;

privatebooleangoDown(boolean[][]table,inti,intj){

)hittheballbydowngoing."

if(i+2<

table.length&

for(intk=i+2;

k<

k++){

privatebooleangoLeft(boolean[][]table,inti,intj){

)hittheballbyleftgoing."

if(j-2>

for(intk=j-2;

j=k;

privatebooleangoRight(boolean[][]table,inti,intj){

)hittheballbyrightgoing."

if(j+2<

table[0].length&

for(intk=j+2;

privatebooleancheckAndDo(boolean[][]table,booleandidHit){

if(isEnd(table)){

if(didHit){

returndoHit(table);

privateboolean[][]getNewCopy(boolean[][]table){

boolean[][]copy=table.clone();

copy.length;

copy=table.clone();

returncopy;

privatebooleanisEnd(boolean[][]table){

booleanhaveOne=false;

if(table&

haveOne){

haveOne=true;

}elseif(table&

haveOne){

privateStringgetTableString(boolean[][]table){

if(j!

"

O"

X"

returnsb.toString();

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1