编写程序,生成一种贯穿10×10字符数组(初始时全为字符‘.‘)的“随机步法”。
编写程序,生成一种贯穿10×10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从一个元素 “走到”另一个元素,每次都向上、向下、向左或向右移动一个元素位置。已访问过的元素按访问顺序用字母A~Z进行标记。示例如图:
提示
利用srand函数和rand函数(见程序deal.c)产生随机数,然后查看此数除以4的余数。余数一共有4种可能的值(0、1、2和3),指示下一次移动的4种可能方向。在执行移动操作之前,需要检查两个条件:一是不能走到数组外面,二是不能走到已有字母标记的位置。只要有一个条件不满足,就得尝试换一个方向移动。如果4个方向都堵住了,程序就必须终止了。
#include <stdio.h> // 指令
#include <time.h>
#include <stdlib.h>
#include <ctype.h>int main(void)
{ char chess[10][10] = {{".........."},{".........."},{".........."},{".........."},{".........."},{".........."},{".........."},{".........."},{".........."},{".........."},};const char alphabet[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};int check[4] = {0};int random = 4, x = 0, y = 0, m, n, sum = 0;srand((unsigned) time(NULL));random = rand() % 4;for (size_t i = 0; i < 100; i++){printf("%d %d \n", x, y);if (i == 0){chess[x][y] = alphabet[i % 26];continue;}do{// 必须要在前面赋值,此时赋值说明对应random无效if (random < 4){check[random] = 1;}do{m = x;n = y;// 必须要在前面赋值,此时赋值说明对应random无效if (random < 4){check[random] = 1;}// 产生初始值 0 1 2 3random = rand() % 4;if (random == 0){m = m - 1;} else if (random == 1) {n = n - 1;} else if (random == 2) {m = m + 1;} else if (random == 3) {n = n + 1;}} while (m < 0 || m > 9 || n < 0 || n >9);for (size_t i = 0; i < 4; i++){printf("this check %d \n", check[i]);sum = sum + check[i];}// printf("%d this sum\n", sum);// 如果四个方向都不能移动则break,跳出当前循环if (sum == 4) break;// 初始化sum = 0;// 若为点则说明无字母,可以继续赋值,若不为点,则有只母,继续找位置} while (chess[m][n] != '.');// printf("%d this sum\n", sum);if (sum == 4) break;// 只有在确定进行了移动时才赋值x = m;y = n;// 初始化为 0for (size_t i = 0; i < 4; i++){check[i] = 0;}// sum和random使用完毕,进行初始化,此处和上面的sum初始化都是必须的,因为break会导致前面的初始化无效sum = 0;random = 4;// 取出对应的字母chess[x][y] = alphabet[i % 26];}for (size_t i = 0; i < 10; i++){for (size_t a = 0; a < 10; a++){// 对小写字母转化为大写并打印putchar(toupper(chess[i][a]));}printf("\n");}}
编写程序,生成一种贯穿10×10字符数组(初始时全为字符‘.‘)的“随机步法”。相关推荐
- 编写程序,生成一种贯穿10*10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都向上、向下、向左或向右移动一个元素位置
编写程序,生成一种贯穿10*10字符数组(初始时全为字符'.')的"随机步法".程序必须随机地从一个元素"走到"另一个元素,每次都向上.向下.向左或向右移动一个 ...
- python生成20个随机数列表偶数下标排列_编写程序,生成一个包含 20 个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。)_学小易找答案...
[简答题]编写程序,输出所有由 1 . 2 . 3 . 4 这 4 个数字组成的素数,并且在每个素数中每个数字只使用 1 次. [填空题]表达式 [x for x in [1,2,3,4,5] if ...
- python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...
[填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...
- c语言中输入n一个整数存入一维数组,编写程序输入n个整数到一维数组(先输入数据的个数n,再输入n个数据),然后以输入的顺序输出这些数。...
满意答案 王毛毛00000 2014.05.25 采纳率:58% 等级:7 已帮助:613人 首先声明:我是来被骗的!因为根据经验绝大部分的一级头衔的人都是想到问题才注册百度的,别人回答了基本不 ...
- C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
字符数组的长度计算:必须以终止符'/0'作为边界,但对字符数组赋值时,有两种方式: 1: 定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d' ...
- c语言字符数组赋值超过,C语言字符数组赋值
C语言字符数组赋值教程 C语言字符数组赋值详解 语法 arr[index] = value; 参数 参数 描述 arr 数组名. index 需要赋值的下标索引. value 需要设置的值. 说明 给 ...
- 有关计算机代码的游戏,七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯-组卷网...
七灯游戏是一款经典的益智类游戏.游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的"开/关"状态,同时,这盏灯对面的两盏灯也会切换 ...
- 关于VS2017调试时,字符数组显示字符串中的字符无效问题
关于VS2017调试时,字符数组显示"字符串中的字符无效"问题 1.如果已经分配过内存,可能是越界导致的指令错误. 2.可能是字符数组成员的值超出了ASCII码表示范围,导致字符无 ...
- c语言sizeof测量字符组长度,C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别...
1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6 上式等价于: (2)char chs[7] = {'a', 'c ...
- C++对类(或者结构体)中字符数组赋值时,出现表达式必须是可修改的左值的问题
最近自己遇到了这类问题,在csdn上找到了很多大神给的解答,非常到位 特别感谢这位: https://blog.csdn.net/JQ_AK47/article/details/53169799 问题 ...
最新文章
- linux系统 opt扩容,Linux虚拟机新增加了块100G硬盘后,把空间分配到/opt下
- php 组合模式,php设计模式(十三)透明组合模式
- Python小游戏(消消乐)
- python交互界面用图片当背景_wxPython实现窗口用图片做背景
- 数据库知识 | 关系型数据库与非关系型数据库小记录
- 大学计算机基础应当掌握的内容,大学计算机基础课程教学大纲2014版.pdf
- 四款855旗舰对比:除开价格,各有优点
- 课程设计旅游景点咨询系统
- matlab双峰模型,为什么用MATLAB画的高斯双峰曲线不能永双高斯函数拟合?
- Ring Buffer 实现原理
- mysql8中文手册_mysql8 参考手册--mysql8 官方介绍
- 360安卓_360手机助手安卓下载
- 安装 OpenCC 简繁体中文转换
- R学习 第九篇:因子
- 转载:安卓Paint使用讲解
- 更改Windows桌面位置为D盘
- 地址搜索栏设置 极速浏览器
- linux系统连接不上wifi
- 解读:电子合同存证五问五答
- C# 屏幕取词 鼠标取词 非剪切板模式