(C语言题目) 新手求助大神

sc_coder 2017-07-27 11:58:49
在10*10的区域内从左上角开始行走,移动方位是上下左右,以A到Z的英文字母标记。移动位置不能超过边界,并且若当前位置的四周都被占据,程序终止。


#include<stdio.h>
#include<stdlib.h>
#include<time.h>


int main(){
int m=9;
char a[m][m];
int i=0,j=0;

for(i=0;i<=m;i++){
for(j=0;j<=m;j++) //布景 10*10
a[i][j]='.';
}

int k;
for(k=0,i=0,j=0;k<=25;k++){
a[i][j]='A'+k;

for(;;){
int x,y,g;
srand((unsigned)time(NULL));
x=rand()%4;
y=i;
g=j;

switch(x){
case 0: i-=1;
break;
case 1: i+=1;
break;
case 2: j-=1;
break;
case 3: j+=1;
break;
}

if(i>=0&&i<=m&&j>=0&&j<=m){ //判定边界条件,值在区间内 ,并且无字母占用
if(a[i][j]=='.')
break;
}
i=y;
j=g;
}

if(a[i+1][j]!='.'&&a[i-1][j]!='.'&&a[i][j+1]!='.'&&a[i][j-1]!='.') //前后都有字母时,路径被封堵,程序结束
break;
}


for(i=0;i<=m;i++){
for(j=0;j<=m;j++){ //输出当前数组
printf("%c",a[i][j]);
}
printf("\n");
}


return 0;

}

结果如下
ABCDEFGHIJK
K。。。。。。L
L。。。。。。M
M。。。。。。N

类似于这种循环


程序编译无问题,但运行结果与条件不符。尝试过调试程序,在循环内走了十多步,并未发现问题。望前辈能解惑。
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2017-07-27
  • 打赏
  • 举报
回复
下一步移动方向应该是随机产生的。
赵4老师 2017-07-27
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAXX 10
#define MAXY 10
void main() {
    char MAP[MAXX][MAXY];
    char str;
    int x,y,z,f,n;

    for (x=0;x<MAXX;x++) {
        for (y=0;y<MAXY;y++) {
            MAP[x][y]='.';
        }
    }

    for (x=0;x<MAXX;x++) {
        printf("\n");
        for (y=0;y<MAXY;y++) {
            printf("%c",MAP[x][y]);
        }
    }
    printf("\n");

    srand((unsigned) time(NULL));
RETRY:
    x=0;y=0;str='A';MAP[x][y]=str;

    for (str='B';str<='Z';str++) {
        n=0;
        f=1;
        while (1) {
            n++;
            z=rand()%4;
            switch (z) {
                case 0: if (y+1<MAXY && MAP[x  ][y+1]=='.') {y++;MAP[x][y]=str;f=0;} break;
                case 1: if (x+1<MAXX && MAP[x+1][y  ]=='.') {x++;MAP[x][y]=str;f=0;} break;
                case 2: if (y-1>0    && MAP[x  ][y-1]=='.') {y--;MAP[x][y]=str;f=0;} break;
                case 3: if (x-1>0    && MAP[x-1][y  ]=='.') {x--;MAP[x][y]=str;f=0;} break;
            }
            if (f==0) break;
            if (n>200) {//钻入死胡同
                for (x=0;x<MAXX;x++) {
                    for (y=0;y<MAXY;y++) {
                        MAP[x][y]='.';
                    }
                }
                goto RETRY;
            }
        }//while
        if (x==MAXX-1 || y==MAXY-1) break;
    }//for

    for (x=0;x<MAXX;x++) {
        printf("\n");
        for (y=0;y<MAXY;y++) {
            printf("%c",MAP[x][y]);
        }
    }
    printf("\n");
}

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧