《程序设计课程设计》实验报告材料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《程序设计》课程设计
姓名:
学号:
班级:软件工程14 班
指导教师:
成绩:
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列的1和第4行的2可以被消除,其他的方格中的棋子均保留。
棋盘中所有的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【测试数据】
为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。
由于数据量可能很大,要注意程序的运行效率。
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,插入后使顺序表中的数据按自然数有序。