流感传染



2013北大《计算概论A》期中试题

【描述】

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。

输入

第一行一个数字n,n不超过100,表示有n*n的宿舍房间。

接下来的n行,每行n个字符,.’表示第一天该房间住着健康的人,#’表示该房间空着,@’表示第一天该房间住着得流感的人。

接下来的一行是一个整数m,m不超过100

输出

输出第m天得流感的人数

输入示例】

5

....#

.#.@.

.#@..

#....

.....

4

输出示例】

16

C代码】

---------------

#include<stdio.h>

#defineARRAY_SIZE 100

intmain(void) {

char a[ARRAY_SIZE][ARRAY_SIZE];

int i, j, k, m, n, sum;

scanf("%d", &n);

getchar();        /*跳过换行符 */

for(i = 0; i < n; ++i) {

for(j = 0; j < n; ++j)

scanf("%c", &a[i][j]);

getchar();        /*跳过换行符 */

}

scanf("%d", &m);

for(k = 2; k <= m; ++k) {

for(i = 0; i < n; ++i) {

for(j = 0; j < n; ++j) {

if(a[i][j] == '@') {

/*左边住着健康的人,置为一个临时标志 */

if(i - 1 >= 0 && a[i - 1][j] =='.')        

a[i - 1][j] = '*';

/*右边住着健康的人 */

if(i + 1 < n && a[i + 1][j] == '.')

a[i + 1][j] = '*';

/*上边住着健康的人 */

if(j - 1 >= 0 && a[i][j - 1] =='.')        

a[i][j - 1] = '*';

/*下边住着健康的人 */

if(j + 1 < n && a[i][j + 1] == '.')

a[i][j + 1] = '*';        

}                                

}

}        

/*将临时标志替换成感染标志 */

for(i = 0; i < n; ++i)

for(j = 0; j < n; ++j)

if(a[i][j] == '*')

a[i][j] = '@';

}

sum = 0;

for(i = 0; i < n; ++i)

for(j = 0; j < n; ++j)

if(a[i][j] == '@')

++sum;

printf("%d\n",sum);                                

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值