C语言程序设计:现代方法2第九题

还有问题有时会卡住无法输出。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define R 10
#define L 10
#define MAX 4
int main(void){
	char arr[R][L];
	int m,n,rand_,m_,n_;//将数组想成10x10棋盘m.n为移动到的坐标,m_,n_为记录移动之前的坐标
	srand((unsigned) time(NULL));
	//将数组赋值成'.'
	for(n=0;n<R;++n){
		for(m=0;m<L;++m){
			arr[n][m] = '.';
		};
	};
	//开始
	for(int i = 0;i<26;++i){
		//将数组第一行第一列赋值成'A'
		if(i == 0){
			arr[0][0] = 'A';
			m_ = n_ = 0;
		}
		else{
			while(1){
				m = m_;
				n = n_;
				rand_ = rand() % MAX;
				switch(rand_){
					case 0: --m; break;
					case 1: ++m; break;
					case 2: --n; break;
					case 3: ++n; break;
				};
				if(m>=0&n>=0&m<10&n<10&arr[m][n] == '.'){
					break;
				};
			};
		m_ = m;
		n_ = n;
		arr[m][n] = 'A' + i;
		if(arr[m+1][n]!='.'&arr[m-1][n]!='.'&arr[m][n+1]!='.'&arr[m][n-1]!='.'){
			break;
		};
		};
	};
	for(int r = 0;r<10;++r){
		for(int l = 0;l<10;++l){
			putchar(arr[r][l]);
		};
		printf("\n");
	};
}

posted on 2023-03-08 23:07  阿斯利康闪电  阅读(10)  评论(0编辑  收藏  举报

导航