矩阵轰炸游戏

矩阵轰炸游戏

导航

1>背景+要求

2>输入格式

3>分析以及算法

4>代码实现

 

主要利用基础知识数组和for循环以及if判断语句去完成该小游戏,都是平时练习所记如果有错误请多多包涵。

 

1>背景+要求

背景:现在有一个大小为NxM的城市,遭遇了X次轰炸,每次轰炸面积为和边界平行的矩形,在轰炸之后共有Y个关键点

要求:现在指挥官需要了解他们有没有被轰炸,若有被轰炸几次,最后一次被轰炸是第几次

 

2>输入格式

输入格式:

第一行,四个整数n、m、x、y (n、m表示城市的范围,x表示轰炸的总轮数,y表示关键点)

以下x行,每行四个整数x1,y1,x2,y2,分别表示被轰炸的矩形的左上角和右下角坐标(例如:(1,3)(7,10)表示轰炸的地方为该两点于边界平行的矩形)

在以下y行输出关键点坐标

输出格式:

共y行每行第一个字符为Y或N(表示是否被轰炸),若为N则说明没有被轰炸,若为Y则说明被轰炸后面接轰炸计数和最后一次没轰炸是第几轮

 

3>分析以及算法

由于城市是一个矩形,每次被轰炸区域也是矩形,则可以使用数组进行存储。

  1. 四个数组保存被轰炸的四角
  2. 输入x轮并用数组保存
  3. 统计和判断区域是否被轰炸

首先对与城市面积问题,不必要去建立一个二维数组(那需要很大的空间)可以定义四个一维的数组去保存四个角(或者定义一个结构体内部有四个变量

定义初始变量,城市的面积-->轰炸的轮数以及关键点个数--->测试点的坐标(同时统计总个数和记录最后一次轰炸)

如果轰炸关键点在区间内及坐标必定满足:a >= x1[j] && a <= x2[j] && b >= y1[j] && b <= y2[j]

将初始需要的变量逐个输入--->其次输入每一轮轰炸的对角坐标--->然后输入目标的坐标--->统计数据(if--else判断输出)

所需数据:

n m:指矩阵的行和列

x:轰炸轮数

y:代表轰炸关键点的个数

x1[],y1[],x2[],y2[]:代表每轮轰炸的对角坐标,具体数目由x控制

a b:代表关键点的坐标,具体数目有y控制

number:总共轰炸轮数

last:最后一次轰炸的轮数

 

4>代码实现

在计算最后一轮轰炸时由于j=0,所以赋值输出之后需要进行先自增在输出

const int size = 1000;//定义一个比较大的范围
	int x1[size], y1[size], x2[size], y2[size];//保存被轰炸的四角
	int n, m, x, y, a, b;//定义初始化的变量

	printf("请输入城市的行和列:");
	scanf("%d %d",&n,&m);
	printf("请输入轰炸轮数:");
	scanf("%d",&x);
	printf("输入目标点个数:");
	scanf("%d",&y);
	for (int i = 0; i < x; i++)
	{
		printf("第%d轮目标对角坐标:",i+1);
		scanf("%d %d %d %d", &x1[i], &y1[i], &x2[i], &y2[i]);
	}
	int number = 0, last = 0;
	for (int i = 0; i < y; i++)
	{
		printf("输入第%d个目标点:",i+1);
		scanf("%d %d",&a,&b);
		number = 0;
		for (int j = 0; j < x; j++)
		{
			if (a >= x1[j] && a <= x2[j] && b >= y1[j] && b <= y2[j])
			{
				number++;
				last = j;
			}
		}
		if (!number)
			printf("该区域没有被轰炸\n");
		else
			printf("该区域被轰炸%d轮最后一次轰炸为第%d轮\n", number, ++last);
	}

矩阵轰炸游戏_第1张图片

修改数据测试:

矩阵轰炸游戏_第2张图片

 

 

你可能感兴趣的:(数组,数据结构,c语言,数据结构,数组)