C语言程序设计题目解析
9.编写程序,生成一种贯穿10x10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都向上,向下,向左或向右移动一个元素位置。已访问过的元素按访问顺序用字母A到Z进行标记。下面是一个输出实例:A . . . . . . . . .
B C D . . . . . . .
. F E . . . . . . .
H G . . . . . . . .
I . . . . . . . . .
J . . . . . . . Z .
K . . R S T U V Y .
L M P Q . . . W X .
. N O . . . . . . .
. . . . . . . . . .
题目如上,小白死磕一小时解出,但仍觉思路并不清晰,希望大佬们指点
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 10
#define COL 10
#define RANDOM (rand() % 4)
int main(void)
{
char ch[ROW][COL];
int i=0,j=0,digit;
for(int r=0; r<ROW; r++)
for(int c=0; c<COL; c++)
ch[r][c] = '.';
srand((unsigned) time(NULL));
for(char a='A'; a<='Z'; a++){
ch[i][j] = a;
if(ch[i-1][j] != '.' && ch[i+1][j] != '.' && ch[i][j-1] != '.' && ch[i][j+1] != '.')
break;
do{
digit=1;
switch(RANDOM){
case 0: //top
if(i-1 >= 0 && ch[i-1][j] == '.'){
i--;
digit=0;
}
break;
case 1: //down
if(i+1 < ROW && ch[i+1][j] == '.'){
i++;
digit=0;
}
break;
case 2: //left
if(j-1 >= 0 && ch[i][j-1] == '.'){
j--;
digit=0;
}
break;
case 3: //right
if(j+1 < COL && ch[i][j+1] == '.'){
j++;
digit=0;
}
break;
}
}while(digit != 0);
}
for(int i=0; i<ROW; i++){
for(int j=0; j<COL; j++)
printf("%c ", ch[i][j]);
printf("\n");
}
return 0;
}
[此贴子已经被作者于2019-4-12 21:42编辑过]









