编写程序,生成一种贯穿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字符数组(初始时全为字符‘.‘)的“随机步法”。相关推荐

  1. 编写程序,生成一种贯穿10*10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都向上、向下、向左或向右移动一个元素位置

    编写程序,生成一种贯穿10*10字符数组(初始时全为字符'.')的"随机步法".程序必须随机地从一个元素"走到"另一个元素,每次都向上.向下.向左或向右移动一个 ...

  2. python生成20个随机数列表偶数下标排列_编写程序,生成一个包含 20 个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。)_学小易找答案...

    [简答题]编写程序,输出所有由 1 . 2 . 3 . 4 这 4 个数字组成的素数,并且在每个素数中每个数字只使用 1 次. [填空题]表达式 [x for x in [1,2,3,4,5] if ...

  3. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...

    [填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...

  4. c语言中输入n一个整数存入一维数组,编写程序输入n个整数到一维数组(先输入数据的个数n,再输入n个数据),然后以输入的顺序输出这些数。...

    满意答案 王毛毛00000 2014.05.25 采纳率:58%    等级:7 已帮助:613人 首先声明:我是来被骗的!因为根据经验绝大部分的一级头衔的人都是想到问题才注册百度的,别人回答了基本不 ...

  5. C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别

    字符数组的长度计算:必须以终止符'/0'作为边界,但对字符数组赋值时,有两种方式: 1: 定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d' ...

  6. c语言字符数组赋值超过,C语言字符数组赋值

    C语言字符数组赋值教程 C语言字符数组赋值详解 语法 arr[index] = value; 参数 参数 描述 arr 数组名. index 需要赋值的下标索引. value 需要设置的值. 说明 给 ...

  7. 有关计算机代码的游戏,七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯-组卷网...

    七灯游戏是一款经典的益智类游戏.游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的"开/关"状态,同时,这盏灯对面的两盏灯也会切换 ...

  8. 关于VS2017调试时,字符数组显示字符串中的字符无效问题

    关于VS2017调试时,字符数组显示"字符串中的字符无效"问题 1.如果已经分配过内存,可能是越界导致的指令错误. 2.可能是字符数组成员的值超出了ASCII码表示范围,导致字符无 ...

  9. c语言sizeof测量字符组长度,C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别...

    1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'}; // 长度为6 上式等价于: (2)char chs[7] = {'a', 'c ...

  10. C++对类(或者结构体)中字符数组赋值时,出现表达式必须是可修改的左值的问题

    最近自己遇到了这类问题,在csdn上找到了很多大神给的解答,非常到位 特别感谢这位: https://blog.csdn.net/JQ_AK47/article/details/53169799 问题 ...

最新文章

  1. linux系统 opt扩容,Linux虚拟机新增加了块100G硬盘后,把空间分配到/opt下
  2. php 组合模式,php设计模式(十三)透明组合模式
  3. Python小游戏(消消乐)
  4. python交互界面用图片当背景_wxPython实现窗口用图片做背景
  5. 数据库知识 | 关系型数据库与非关系型数据库小记录
  6. 大学计算机基础应当掌握的内容,大学计算机基础课程教学大纲2014版.pdf
  7. 四款855旗舰对比:除开价格,各有优点
  8. 课程设计旅游景点咨询系统
  9. matlab双峰模型,为什么用MATLAB画的高斯双峰曲线不能永双高斯函数拟合?
  10. Ring Buffer 实现原理
  11. mysql8中文手册_mysql8 参考手册--mysql8 官方介绍
  12. 360安卓_360手机助手安卓下载
  13. 安装 OpenCC 简繁体中文转换
  14. R学习 第九篇:因子
  15. 转载:安卓Paint使用讲解
  16. 更改Windows桌面位置为D盘
  17. 地址搜索栏设置 极速浏览器
  18. linux系统连接不上wifi
  19. 解读:电子合同存证五问五答
  20. C# 屏幕取词 鼠标取词 非剪切板模式

热门文章

  1. 概率论在实际生活的例子_生活中有趣的概率论例子
  2. 金山卫士界面源码解读及界面库分离(4)
  3. [转]基于大规模语料的新词发现算法
  4. 走吧走吧,拿着更多的票子把活干吧!
  5. Nginx从入门到精通(笔记)
  6. 2021中职网络空间安全国赛隐藏信息探索解析做题详解
  7. Python 网络爬虫实现 QQ 音乐下载
  8. Unity-Spine换装问题
  9. SQL练习题附重点函数说明--更新至21题
  10. u盘工作表在计算机上打不开,U盘中无法打开的excel的解决办法