版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计课程设计姓 名:学 号:班 级:软件工程14 班指导教师:成 绩:1 .消除类游戏1.1 【问题描述】消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行mJ的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子 时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。1.2 【基本要求】现在给你一个n行mJ的棋盘(1 (n,m(30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。请注意:一个棋子可能在某一行和某一列同时被消除。输入数据格式:输入的第一行包含两个整数n, m,用空格分隔,分别表
2、示棋盘的行数和列数。接下来 n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。输出数据格式:输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。1.3 【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每 次运行程序时都要从键盘输入数据。测试数据输入:输出:4 52 2 3 0 22 2 3 1 23 4 5 0 43 4 5 1 42 3 2 0 32 3 2 1 32 2 2 4 40 0 0 4 4输出说明:
3、棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留测试数据二输入:输出:4 52 2 3 0 22 2 3 1 23 0 0 0 03 1 1 1 12 3 2 0 32 3 2 1 32 2 3 3 32 2 0 0 0输出说明:棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留1.4【功能实现】#include <iostream>#include <windows.h> using namespace std;int main()(int m, n, i ,j;int temp;cin >> n >> m;
4、temp = m;m = n;n = temp;int * map = new intm * n;int * mark = new intm * n;int * tmap = map;int * tmark = mark;int dif = 0;/输入for ( i = 0 ; i < m ; i+ )for (j = 0; j < n; j+)cin >> *(tmap + i * n + j);for (i = 0; i < m; i+)for (j = 0; j < n; j+)(/横行if (tmap + 2 - map) % n != 0 | (t
5、map + 1 - map) % n != 0)if (*(tmap) = *(tmap + 1) && * (tmap + 1) = *(tmap + 2)(dif = tmap - map;* (tmark + dif) = 0;* (tmark + dif + 1) = 0;* (tmark + dif + 2) = 0;)/竖列if (tmap + 2 * n - map < m * n | tmap + n - map < m * n)if (*(tmap) = *(tmap + n) && * (tmap + n) = *(tmap +
6、2 * n) (dif = tmap - map;* (tmark + dif) = 0;* (tmark + dif + n) = 0;* (tmark + dif + 2 * n) = 0;)tmap = map + (j+1) + i * n;)/输出cout << endl;tmap = map;for (i = 0; i < m; i+)for (j = 0; j < n; j+)if (* (tmark + i * n + j) = 0)*(tmap + i * n + j) = 0;for (i = 0; i < m; i+)for (j = 0;
7、j < n; j+)cout<< *(tmap + i * n + j)<<" "cout << endl;system("pause");return 0;1.5 【结果和截图】1.6 【心得体会】通过这次试验,我对c 语言编译器和对棋盘类游戏中的棋子行列删除有了更加深刻的认识和了解。数字统计2.1 【问题描述】某次科研调查时得到了n个自然数,每个数均不超过(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。2.2 【基本要求】现给
8、你n个自然数,统计这些自然数中每个不相同数各自出现的次数,并按照自然数从小到大的 顺序输出统计结果。输入数据有n+1行。第1行是整数n(1< n< 200000),表示自然数的个数;第2n+1行每行一个自然数。输出有m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。2.3 【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每 次运行程序时都要从键盘输入数据。输入输出82424510021002 34 25 1100 2由于数据量可能很大,要注意程序的运
9、行效率。2.4 【实现提示】定义顺序表,元素类型为:Element,顺序表类型为:SeqList,用顺序表的数组 data记录自然数和该数出现的次数。定义如下:typedef struct datalong int number; long int count; Element;typedef struct listElement data10000; /*存储自然数和该数出现的次数*/int length; /*存储不同自然数的个数,即顺序表的长度*/ SeqList;对输入的每一个数据,在顺序表中查找,若存在,则该数出现次数增1 ,否则将该数插入顺序表 中,出现次数为1,插入后使顺序表中的
10、数据按自然数有序。2.5 【功能实现】#include<stdio.h>void main()t ypedef struct datalong int number;long int count; Element;typedef struct listElement data10000; /*存储自然数和该数出现的次数*/int length; /*存储不同自然数的个数, 即顺序表的长度 */ SeqList;SeqList a;Element data110000,data2;i nt n=0,s=1,i,j;/*n 代表输入数的个数,s 等同于 a.length, 代表不同数的
11、个数 */f or(i=0;i<10000;i+)data1i.count=0;printf(" 请输入要输入数的个数 n");scanf("%d",&n);/* 输入要输入数的个数*/f or(i=0;i<n;i+)scanf("%d",&a.datai.number); /*输入 n 个数 */data10.number=a.data0.number;data10.count+;for(i=1;i<n;i+)for(j=0;j<s;j+)if(a.datai.number=data1j.nu
12、mber)data1j.count+;break;if(j=s)data1s.number=a.datai.number;data1s.count+;s+;for(i=1;i<s;i+)for(j=0;j<s-i;j+)if(data1j.number>data1j+1.number)data2=data1j;data1j=data1j+1;data1j+1=data2;printf(" 结果如下 n");f or(i=0;i<s;i+)printf("%d,%dn",data1i.number,data1i.count);2.6
13、 【结果和截图】2 7【心得体会】通过本次实验,我对c 语言编译器和 n 个数的排序和统计有了更加深刻的认识和了解。3.画图3.1 【问题描述】ASCII Art的艺术。例如,下图用ASCII字符来画图是一件有趣的事情,并形成了一门被称为 是用ASCII字符画出来的 CSPRO字样。./.一/.Il./-'.|.|'_.|.|_).|.|_).|.|.|.|.|.一).|._/|._.<|.|_|.|.'-I/|_ll_|._/.3.2 【基本要求】实现一个用 ASCII字符来画图的程序,支持以下两种操作:画线:给出两个端点的坐标,画一条连接这两个端点的线段。简便
14、起见题目保证要画的每条线段都是水平或者竖直的。水平线段用字符-来画,竖直线段用字符|来画。如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符+代替。填充:给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段。注意这里的相邻位置只需要考虑上下左右4个方向,如下图所示,字符 只和4个字符*相邻。.*.*.输入数据格式如下:第1行有三个整数 m, n和q。m和n分别表示画布的宽度和高度,以字符为单位。q表示画图操作的个数。(2 < m, n & 100 , 0 < q < 100)第2行至第q + 1行,
15、每行是以下两种形式之一:0 x 1 y 1 x 2 y 2:表示画线段的操作,(x 1, y。和(X2, y2)分别是线段的两端,满足要么x 1= X2且y1 w y2, 要么 y 1=y2 且 x 1 w x2。(0 < x1 ,x 2<m, 0< y ,y 2<n)。1 x y c :表示填充操作,(x, y)是起始位置,保证不会落在任何已有的线段上;c为填充字符,是大小写字母。(0<x<m, 0<y<n)。画布的左下角是坐标为(0, 0)的位置,向右为 x坐标增大的方向,向上为y坐标增大的方向。这q个操作按照数据给出的顺序依次执行。画布最初
16、时所有位置都是字符.(小数点)。输出数据格式如下:输出有n行,每行m个字符,表示依次执行这q个操作后得到的画图结果。3.3【测试数据】测试数据一输入:输出:4 2 31 0 0 B0 1 0 2 01 0 0 AAAAAA-A测试数据二输入:输出:16 13 90 3 1 12 1012 1 12 30 12 3 6 30 6 3 6 90 6 9 12 9012 912 11012 11 3 110 3 11 3 11 4 2 C+|CCCCCCCC|CC+|CC|CC|CC|CC|CC|CC+|CCCCCCCC|+3.4【功能实现】#include<stdio.h>void d
17、rawline(char a100,int m,int n, int x1,int y1,int x2,int y2)if(x2=x1&&y2!=y1)if(yi<=y2)for(int i=n-1-y2;i<=n-1-y1;i+)if(aix1='-')aix1='+'elseaix1=T;elsefor(int i=n-1-y1;i<=n-1-y2;i+)if(aix1='-')aix1='+'elseaix1=T;if(x2!=x1&&y2=y1)if(x2>=x1)f
18、or(int i=x1;i<=x2;i+)if(ay2i='|')ay2i='+'elseay2i='-'elsefor(int i=x2;i<=x1;i+)if(ay2i='|')ay2i='+'elseay2i='-'void fillchar(char a100,int m,int n, int x,int y,char b)int right=x,left=x,top=y,low=y;if(an-1-yx!='|'&&an-1-yx!='-
19、'&&an-1-yx!='+'&&an-1-yx!=b) an-1-yx=b;right+;left-;top+;low-;if(right<m)fillchar(a,m,n,right,y,b);if(left>=0)fillchar(a,m,n,left,y,b);if(top<n)fillchar(a,m,n,x,top,b);if(low>=0)fillchar(a,m,n,x,low,b);void printcanvas(char a100,int n,int m)for(int i=0;i<n;
20、i+)for(int j=0;j<m;j+) printf("%c",aij);printf("n");void main() char canvas100100,b;int i,k,x1,y1,x2,y2;int n,m,q;printf(" 请输入 n,m,q:n");scanf("%d %d %d",&m,&n,&q);for(int ii=0;ii<n;ii+)for(int j=0;j<m;j+) canvasiij='.'for(i=0;i<
21、;q;i+) scanf("%d",&k);if(k=0) scanf("%d %d %d %d",&x1,&y1,&x2,&y2);drawline(canvas,m,n,x1,y1,x2,y2);else if(k=1)scanf("%d %d %c",&x1,&y1,&b);fillchar(canvas,m,n,x1,y1,b);printcanvas(canvas,n,m);3.5 【结果和截图】3.6 【心得体会】通过本次实验,我对c 语言编译器和图形坐标和关
22、系上的处理有了更加深刻的认识和了解。4,送货4.1 【问题描述】为了增加公司收入,F公司新开设了物流业务。由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F公司现在只安排了小明一个人负责所有街道的服务。任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有n个交叉路口, m条街道连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口。除开 街道的首尾端点,街道不会在其他位置与其他街道相交。每个交叉路口都至少连接着一条街道,有的 交叉路口可能只连接着一条或两条街道。4.2 【基本需求】小明希望设计一个方
23、案,从编号为1的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次。输入数据格式输入的第一行包含两个整数n, m(1 <n<10, n-1 < me 20),表示交叉路口的数量和街道的数量,交叉路口从1到n标号。接下来m行,每行两个整数 a, b ,表示和标号为 a的交叉路口和标号为 b的交叉路口之间有一条 街道,街道是双向的,小明可以从任意一端走向另一端。两个路口之间最多有一条街道。输出输出格式如果小明可以经过每条街道正好一次,则输出一行包含m+1个整数P1, P 2, P 3,,Pm+1,表示小明经过的路口的顺序,相邻两个整数之间用一个空格分隔。如果有多种方案满足条件,则输出字典序 最小的一种方案,即首先保证P1最小,P1最小的前提下再保证 P2最小,依此类推。如果不存在方案使得小明经过每条街道正好一次,则输出一个整数1 o4.3 【测试数据】测试数据输入:输出:4 51 2 4 1 3 41 21 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《电影欣赏与赏析》课件
- 数字电路的软件仿真Multisim的应用
- 汽车离合器课件
- 《敦煌学探秘》课件
- 2026自动驾驶商业化进程及法律法规与保险责任界定研究报告
- 2026无人零售技术应用现状及市场接受度研究
- 《现代汉语教学》课件
- 施工任务组织原
- 毕业论文写作与文献资料收集
- 2026年新能源汽车产业链上下游企业合作模式研究报告
- 中药药剂学习题集全(修改版)
- 2026年南昌辅警考试试题及答案
- 新版2026-2027学年(新教材)统编版九年级历史下册全册12(教学设计)教案合集83
- 2026年度全国保密教育线上培训题库(选择+判断)及参考答案
- 2026中国光纤涂覆材料市场需求与国产化替代分析
- 危重症患者合理约束管理规范
- 中国胆囊息肉诊疗指南(2025版)
- 《智能人脸识别系统》课件
- 江苏省电力公司新建居住区供配电工程服务管理办法
- 计价格200210号《工程勘察设计收费管理规定》
- 卡西欧手表SGW-100(3157)中文说明书
评论
0/150
提交评论