矩陣轟炸游戲
導航
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>分析以及演算法
由于城市是一個矩形,每次被轟炸區域也是矩形,則可以使用陣列進行存盤,
- 用四個陣列保存被轟炸的四角
- 輸入x輪并用陣列保存
- 統計和判斷區域是否被轟炸
首先對與城市面積問題,不必要去建立一個二維陣列(那需要很大的空間)可以定義四個一維的陣列去保存四個角(或者定義一個結構體內部有四個變數)
定義初始變數,城市的面積-->轟炸的輪數以及關鍵點個數--->測驗點的坐標(同時統計總個數和記錄最后一次轟炸)
如果轟炸關鍵點在區間內及坐標必定滿足: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);
}

修改資料測驗:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254830.html
標籤:其他
