电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

类型《程序设计》课程设计

收藏

编号:342614795    类型:共享资源    大小:172.16KB    格式:DOCX    上传时间:2023-01-06
  
18
金贝
分享到微信 分享到微博 分享到QQ空间
关 键 词:
程序设计 课程设计
资源描述:
《程序设计》课程设计 姓 名: 学 号: 班 级: 指导教师: 成 绩: 1. 消除类游戏 1.1【问题描述】 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 1.2【基本要求】 现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入数据格式: 输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出数据格式: 输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。 1.3【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 测试数据一 输入: 输出: 4 5 2 2 3 1 2 3 4 5 1 4 2 3 2 1 3 2 2 2 4 4 2 2 3 0 2 3 4 5 0 4 2 3 2 0 3 0 0 0 4 4 输出说明: 棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。 测试数据二 输入: 输出: 4 5 2 2 3 1 2 3 1 1 1 1 2 3 2 1 3 2 2 3 3 3 2 2 3 0 2 3 0 0 0 0 2 3 2 0 3 2 2 0 0 0 输出说明: 棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。 1.4【功能实现】 #include #include using namespace std; int main() { int m, n, i ,j; int temp; cin >> n >> m; temp = m; m = n; n = temp; int * map = new int[m * n]; int * mark = new int[m * 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 || (tmap + 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 + 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; j < n; j++) cout<< *(tmap + i * n + j)<<" "; cout << endl; } system("pause"); return 0; } 1.5【结果和截图】 1.6【心得体会】 通过这次试验,我对c语言编译器和对棋盘类游戏中的棋子行列删除有了更加深刻的认识和了解。 2数字统计 2.1【问题描述】 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 2.2【基本要求】 现给你n个自然数,统计这些自然数中每个不相同数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 输入数据有n+1行。第1行是整数n(1≤n≤200000),表示自然数的个数;第2~n+1行每行一个自然数。 输出有m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。 2.3【测试数据】 为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。 输入 输出 8 2 4 2 4 5 100 2 100 2 3 4 2 5 1 100 2 由于数据量可能很大,要注意程序的运行效率。 2.4【实现提示】 定义顺序表,元素类型为:Element,顺序表类型为:SeqList,用顺序表的数组data记录自然数和该数出现的次数。定义如下: typedef struct data{ long int number; long int count; } Element; typedef struct list{ Element data[10000]; /*存储自然数和该数出现的次数*/ int length; /*存储不同自然数的个数,即顺序表的长度*/ } SeqList; 对输入的每一个数据,在顺序表中查找,若存在,则该数出现次数增1,否则将该数插入顺序表中,出现次数为1,插入后使顺序表中的数据按自然数有序。 2.5【功能实现】 #include void main() { typedef struct data{ long int number; long int count; } Element; typedef struct list{ Element data[10000]; /*存储自然数和该数出现的次数*/ int length; /*存储不同自然数的个数,即顺序表的长度*/ } SeqList; SeqList a; Element data1[10000],data2; int n=0,s=1,i,j;/*n代表输入数的个数,s等同于a.length,代表不同数的个数*/ for(i=0;i<10000;i++) { data1[i].count=0; } printf("请输入要输入数的个数\n"); scanf("%d",&n); /*输入要输入数的个数*/ for(i=0;idata1[j+1].number) { data2=data1[j]; data1[j]=data1[j+1]; data1[j+1]=data2; } printf("结果如下\n"); for(i=0;i
展开阅读全文
提示  金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:《程序设计》课程设计
链接地址:https://www.jinchutou.com/shtml/view-342614795.html
关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.