大一C语言总结贴(持更) Part 10 随机步法
【问题描述】
编写程序,生成一种贯穿10*10字符数组的随机步法。字符数组初始化为全 '.'。程序随机地从一个元素“走到”另一个元素,每次可以向左、向右、向上、向下移动一个元素位置,不可越出边界。已访问过的元素按字母顺序标记为A到Z,不可再次走入。到达Z为一次成功行走。若4个方向都被堵住,则行走失败。输入初始位置,输出一次行走结果。
方向规定:0为上,1为右,2为下,3为左。即顺时针。
4个方向的尝试准则:如果随机到的方向不能走,则从该方向开始按顺时针一一尝试。例如,某一步随机到了方向 2,经检验 2 方向行不通,则尝试方向 3 ;如果方向 3 也行不通,则尝试方向 0 ( (3+1) % 4);如果方向 0 还是行不通,则尝试方向 1;如果 1 也行不通,4个方向都行不通,就认定行走失败,整个行走过程结束。
注意:如果行走失败,那么就退出行走,仍然要输出行走结果。
【输入形式】两个数x, y ,两个数之间用空格隔开,分别代表初始位置的行和列。0<=x,y<=9
【输出形式】输出10*10的方阵。输出的每个字符用空格隔开,每行末尾有空格。
【样例输入1】0 0
【样例输出1】
A . . . . . O P Q R
B C F G H I N M . S
. D E . . J K L . T
. . . . . . . . . U
. . . . . . . X W V
. . . . . . . Y Z .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
【样例说明】由于编译器的不同,导致rand的随机结果不一样。所以平台的输出和同学们在本机上的输出是不同的,因此不要纠结于和样例不一样。本样例是在dev c++下的输出,如果您使用了其他 IDE,可能会有完全不一样的输出。
分析:使用stdlib.h中的rand()函数来生成随机数,例如:rand()%4 输出 0~3的随机数。为方便助教检查,要求以输入初始位置为随机种子。例如:输入初始位置为x行y列,则设置随机种子为 x+10*y,通过开始前调用 srand(x+10*y) 来完成。之后就不要再调用 srand 函数了。
例如:
int x = 0, y= 0, i;
srand(x + 10 * y);
for (i = 0; i < 26; i++) {
int dir = rand() % 4;
printf("%d\n", dir);
}
另外,上下左右行走也就是横纵坐标加减1。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>void ranwalk (char walk[10][10]);
void array (char walk[10][10]);//打印结果int main()
{char a[10][10];ranwalk(a);array(a);
}void ranwalk (char walk[10][10])
{int x, y, seed;int i, j, k;scanf ("%d%d", &x, &y);seed = x + 10 * y;static int dir, m;for (i = 0; i < 10; i++){for (j = 0; j < 10; j++){walk[i][j] = '.';}}srand(seed);walk[x][y] = 'A';for (m = 66; m < 91; m++){dir = rand() % 4;for ( k = 0; k <= 3;){i = x, j = y; switch(dir) {case 0 :if(x != 0)x = x - 1;break;case 1 :if (y != 9)y = y + 1;break;case 2 :if (x != 9)x = x + 1;break;case 3 :if (y != 0)y = y - 1;break;}if (walk[x][y] == '.'){walk[x][y] = m;break;}else{dir = (dir + 1) % 4;x = i; y = j;}k++;}if (k == 4)break;}
} void array(char walk[10][10]){int i, j;for (i = 0; i < 10; i++) {for (j = 0; j < 10; j++) {printf("%c ", walk[i][j]);}printf("\n");}
}
大一C语言总结贴(持更) Part 10 随机步法相关推荐
- 大一C语言总结贴(持更) Part1 输出菱形
本系列为大一C语言小白的上学期程序设计作业,一学期结束特简单整理一下.内容部分有参考大神的文章,部分代码段也稍显麻烦,本着分享总结的目的,不足之处欢迎指正!!! [问题描述]给定一个数 n ,2 &l ...
- 大一C语言挣扎之路1(电子计算机概述和Visual Studio )
大一C语言挣扎之路1(电子计算机概述和Visual Studio ) C语言 一 电子计算机概述 1. 计算机的诞生 2. 冯·诺依曼结构 功能 组成部件 计算机工作流程 3. 计算机的发展历史 4. ...
- c语言大一期中考试含答案,大一C语言期末考试选择复习题.docx
大一C语言期末考试选择复习题 ### ~~~1 下列叙述中正确的是( ). 程序设计就是编制程序 程序的测试必须由程序员自己去完成 程序经调试改错后还应进行再测试 程序经调试改错后不必进行再测试 ~C ...
- 【大一C语言项目】Cjson的认识与实现(一)
[大一C语言项目]Cjson的认识与实现(一) 一.初识json 参考网站 菜鸟教程:JSON JSON介绍 JSON在线解析 JSON是什么 JSON 指的是 JavaScript 对象表示法(Ja ...
- 大一c语言大作业课题大全,昆明理工大学大一C语言大作业题目.doc
昆明理工大学大一C语言大作业题目 综合性实践排序求平均值(包括将数拆散求最大最小值).函数ReadDat()随机产生100个存放到数组aa中00个jsSort()函数的功能是:进行降序排列.最后调用函 ...
- 大学c语言程序设计期末考试试卷,大学大一c语言程序设计期末考试试卷及答案.doc...
大学大一c语言程序设计期末考试试卷及答案.doc 计算机科学学院C语言程序设计试卷A第1页(共8页)四川师范大学计算机科学学院20122013学年度第二学期期末考试C语言程序设计试卷试卷A答卷说明1. ...
- 沈航C语言上机实验题答案,大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc...
大学大一c语言程序设计实验室上机题全部代码答案(实验报告) C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hell ...
- c语言的实验题答案,大一C语言上机实验试题及答案
大一c语言基础 实验三 选择结构程序设计(2学时) 一.实验方式:一人一机 二.实验目的: 1.熟练掌握if语句和switch语句. 2.练习并掌握多分支选择结构的编程方法. 3.学习调试和修改程序的 ...
- 大一c语言程序课程报告,大一C语言课程设计.doc
大一C语言课程设计 C语言课程设计报告 班 级: 电气1004 学 号: 201009334 姓 名: 雷海燕 指导教师: 王果 2011 年 07 月 18 日 1 基本题目 1.1题目 1.1 题 ...
最新文章
- Node.js的url模块简介
- WCF服务的REST / SOAP端点
- 计算机教室怎样自动批量修改ip,批量设置IP地址和计算机名
- Codeforces 524E Rooks and Rectangles 线段树
- 题库练习5(句子逆序、字符串排序、int型二进制表示中1的个数、购物单)
- 浅析聚簇索引与非聚簇索引(也叫二级索引)
- 四大利器帮你走出IT运维管理的困境
- Qt实现简单的密码加密
- 短视频无水印解析网站源码
- Anylogic学习—银行排队模型
- Linux 下设置 SVN 忽略的目录和文件
- linux系统安装yarn,centos安装yarn
- python0不能做除数报错_浅谈pandas dataframe对除数是零的处理
- 香港流行乐黄金二十年——经典歌手(音乐人)全面回顾 二
- 快速学会网页中鼠标经过图片放大效果
- Shader GrabPass应用实例——实现扭曲效果
- intelGMA950开启3d特效
- 网站提示HTTP503Service Unavailable的处理办法
- 微信小程序点击图片预览真机无法显示的问题
- 112-RTKLIB中关于dcb文件读取的问题