OpenJudge NOI 1.8 15:细菌的繁殖与扩散
生活随笔
收集整理的這篇文章主要介紹了
OpenJudge NOI 1.8 15:细菌的繁殖与扩散
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目鏈接】
OpenJudge NOI 1.8 15:細(xì)菌的繁殖與擴(kuò)散
【題目考點(diǎn)】
1. 二維數(shù)組
2. 方向數(shù)組
在一個(gè)矩陣中,當(dāng)前位置為(sx, sy),將下一個(gè)位置與當(dāng)前位置橫縱坐標(biāo)的差值記到一個(gè)數(shù)組中,即為方向數(shù)組。
方向數(shù)組有一維數(shù)組和二維數(shù)組兩種寫法,效果是等同的。
以遍歷上下左右四個(gè)方向?yàn)槔?#xff1a;
- 一維數(shù)組寫法
- 二維數(shù)組寫法
【解題思路】
設(shè)(i,j)位置有x個(gè)細(xì)菌,每個(gè)細(xì)菌只能活一天,但能繁殖出10個(gè)后代。所以一天后,(i,j)位置有2x個(gè)細(xì)菌,(i,j)位置周圍8個(gè)格子每個(gè)位置都會(huì)增加x個(gè)細(xì)菌。
總體來(lái)看,就是以(i,j)為中心的9個(gè)位置每個(gè)位置的細(xì)菌數(shù)量都增加了(i,j)位置的細(xì)菌數(shù)量。
輸入,設(shè)初始值,而后遍歷整個(gè)二維數(shù)組n次(n為天數(shù)),每次遍歷先存儲(chǔ)二維數(shù)組當(dāng)前的狀態(tài)。遍歷時(shí),針對(duì)每個(gè)位置(i,j),都使以其為中心的9個(gè)位置增加a[i][j]。
【題解代碼】
解法1:二維方向數(shù)組
#include<bits/stdc++.h> using namespace std; int dir[8][2] = {{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};//周圍8個(gè)位置 int main() {int b[10][10] = {}, c[10][10];//c保存此時(shí)的狀態(tài)int m, n;cin >> m >> n;b[5][5] = m;for(int k = 1; k <= n; ++k)//k天數(shù){for(int i = 1; i <= 9; ++i)for(int j = 1; j <= 9; ++j)//c數(shù)組保存第k-1天的狀態(tài) c[i][j] = b[i][j];for(int i = 1; i <= 9; ++i)for(int j = 1; j <= 9; ++j){b[i][j] += c[i][j];//中間位置增加c[i][j]for(int p = 0; p < 8; ++p)//周圍8個(gè)位置增加c[i][j] {int x = i + dir[p][0], y = j + dir[p][1];//(i,j)周圍的一個(gè)位置(x,y) if(x >= 1 && x <= 9 && y >= 1 && y <= 9)//如果(x,y)在地圖范圍內(nèi) b[x][y] += c[i][j];}} }for(int i = 1; i <= 9; ++i){for(int j = 1; j <= 9; ++j)cout << b[i][j] << ' ';cout << endl;}return 0; }解法2:一維方向數(shù)組
#include<bits/stdc++.h> using namespace std; int dx[8] = {0,0,1,1,1,-1,-1,-1}, dy[8] = {1,-1,-1,0,1,-1,0,1}; //周圍8個(gè)位置 int main() {int b[10][10] = {}, c[10][10];//c保存此時(shí)的狀態(tài)int m, n;cin >> m >> n;b[5][5] = m;for(int k = 1; k <= n; ++k)//k天數(shù){for(int i = 1; i <= 9; ++i)for(int j = 1; j <= 9; ++j)//c數(shù)組保存第k-1天的狀態(tài) c[i][j] = b[i][j];for(int i = 1; i <= 9; ++i)for(int j = 1; j <= 9; ++j){b[i][j] += c[i][j];//中間位置增加c[i][j]for(int p = 0; p < 8; ++p)//周圍8個(gè)位置增加c[i][j] {int x = i + dx[p], y = j + dy[p];//(i,j)周圍的一個(gè)位置(x,y) if(x >= 1 && x <= 9 && y >= 1 && y <= 9)//如果(x,y)在地圖范圍內(nèi) b[x][y] += c[i][j];}} }for(int i = 1; i <= 9; ++i){for(int j = 1; j <= 9; ++j)cout << b[i][j] << ' ';cout << endl;}return 0; }總結(jié)
以上是生活随笔為你收集整理的OpenJudge NOI 1.8 15:细菌的繁殖与扩散的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql ini配置文件分组排序_My
- 下一篇: 信息学奥赛一本通 1164:digit函