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编辑过]