有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人 c语言#include stdio.h
#include iostream
int main()
{
int i,j,n,m,e,sl,o,h;
printf("请输入n\n");
scanf("%d",n);
char sz[100][100];
int hzb[100]={0},zzb[100]={0};
for(i=0;in;i)
{
printf("请输入第%d数组状态\n",i);
scanf("%s",sz[i]);
}
printf("请输入m\n");
scanf("%d",m);
while(m1)
{
e=0;
for(i=0;in;i)
{
for(j=0;jn;j)
{
//寻找第一天得流感的人
if(sz[i][j]=='@')
{
hzb[e]=i;
zzb[e]=j;
e;
}
}
}
for(i=0;ie;i)
{
o=hzb[i];
h=zzb[i];
//判断病人 , 邻居 , 上一行,是否有人,有人,另感染
if(o=1sz[o-1][h]=='.')
{
sz[o-1][h]='@';
}
//判断病人 , 邻居,左列,是否有人 , 有人,另感染
if(h=1sz[o][h-1]=='.')
{
sz[o][h-1]='@';
}
//判断病人,邻居,右列 , 是否有人,有人,另感染
//h 1=n-1,不能让列数超过给定范围
if(h 1=n-1sz[o][h 1]=='.')
{
sz[o][h 1]='@';
}
//判断病人 , 邻居,下一行,是否有人,有人 , 另感染
if(o 1=n-1sz[o 1][h]=='.')
{
sz[o 1][h]='@';
}
}
m--;
}
sl=0;
for(i=0;in;i)
{
for(j=0;jn;j)
{
if(sz[i][j]=='@')
{
sl;
}
}
}
printf("第m天得流感总共%d人\n",sl);
【编程C语言流感传染函数 c语言传感器编程】 system("pause");
return 0;
}
C语言面向过程,应该是无法完成控制台输入部分,需要C完成输入部分 。C编译环境能编译C语言 , 以上供大家参考
流感问题 。。c语言,程序不对 。。求大神纠错for(k=1;km;k)
{
for(i=1;in 1;i)
{
for(j=1;jn 1;j)
{
if(a[i][j]=='@') //这里及之后的几个if句出现问题
{
if(a[i 1][j]=='.')
{
a[i 1][j]='@';
}
if(a[i][j-1]=='.')
{
a[i][j-1]='@';
}
if(a[i][j 1]=='.')
{
a[i][j 1]='@';
}
if(a[i-1][j]=='.')
{
a[i-1][j]='@';
}
}
}
}
}
以上进行注释标记的部分的问题是,当扫描到一个房间是有流感标记的房间,如果没有空房间的话,那么许多房间都会错误的成为流感单元'@'
比如说. . . . .
. @ . . .
. . . . .
. . . . .
.. . . . .
经过一次循环会变成 . @ @ @ @
@ @ @ @ @
@ @ @ @ @
@ @ @ @ @
@ @ @ @ @
我想到的解决方法有两个:
1、新建一个和输入数组一样大的数组 , 当扫描原数组当前单元为流感标记'@'的单元时 , 在新建数组内进行改变,扫描完成再把新建数组的值赋值给原数组
2、设置一个中间态,称作即将感染态'$',当扫描到流感标记'@'时,在其四周四个'.'单元中赋值'$',扫描完成后将所有'$'变成'@'
c语言利用递归 解决流感传染问题#include stdlib.h
#include malloc.h
#include memory.h
//感染函数输入参数:
//room: 房间现状
//n:房间行列数
//p:感染者所在房间序号
void infect(char *room, int n, int p)
{
if (p0) return;
if (p=n*n) return;
int a[4];
a[0]=p-1;
a[1]=p 1;
a[2]=p n;
a[3]=p-n;
p%=n;
if (p==0) a[0]=-1;
if (p==n-1) a[1]=-1;
if (a[2]=n*n) a[2]=-1;
if (a[3]0) a[3]=-1;
for (p=0; p4;p)
{
n=a[p];
if (n==-1) continue;
//如果该房间住着健康的人,则感染
if (room[n]=='.') room[n]='@';
}
}
//用来显示第m天的宿舍状态
void print(const char *room, int n, int m)
{
int i,j;
printf("第%d天宿舍状态:\n",m);
for (j=0; jn;j)
{
for (i=0; in;i) printf("%c", *room);
printf("\n");
}
}
int process(const char *filename)
{
int n;//房间行列数
char *room; //房间
int m;//m天
FILE *f;
if (NULL==(f=fopen(filename,"r"))) return -1; //文件打开失败
//读取房间行列数
char buf[1000];
if (NULL==fgets(buf, sizeof(buf), f)) return -2; //读取行列数失败
if (1!=sscanf(buf, "%d", n)) return -2;
if (n=0) return -3;//房间行列数n不合法
//读取房间现状
room=(char*)malloc(n*n);//为房间分配内存
int i;
char *temp;
for (i=0,temp=room; in;i,temp =n)
{
if (NULL==fgets(buf, sizeof(buf), f))
{
free(room);
return -4;//读取读取房间现状有误
}
memcpy(temp,buf,n);
}
//对房间现状进行合法性分析
for (i=n*n,temp=room; i; --i,temp)
{
if (*temp=='.') continue;
if (*temp=='@') continue;
if (*temp=='#') continue;
return -5; //房间现状不合法
}
//读取m值
if (NULL==fgets(buf, sizeof(buf), f)) return -6;//读取m失败
if (1!=sscanf(buf, "%d", m)) return -6; //读取m失败
if (m0) return -7; //m不合法
fclose(f);
int j;
char *ROOM;//用来备份房间现状
ROOM=(char*)malloc(n*n);
print(room, n,0);
for (j=0; jm;j)
{
memcpy(ROOM,room,n*n);//备份房间现状
for (i=n*n,temp=ROOM; i; --i,temp)
{
if (*temp!='@') continue;
//开始感染前后左右的房间
infect(room, n, temp-ROOM);
}
print(room, n, j 1);
}
for (i=n*n,j=0, temp=room; i; --i,temp)
if (*temp=='@')j;
printf("%d\n",j);
free(room);
free(ROOM);
return 0;
}
int main(int argc, char* argv[])
{
int ret;
if (argc=1)
{
printf("用法:infect filename\n");
return 0;
}
ret=process(argv[1]);
switch(ret)
{
case -1: printf("文件%s打开失败 。\n",argv[1]); break;
case -2: printf("读取房间行列数失败 。\n");break;
case -3: printf("房间行列数不合法 。\n");break;
case -4: printf("读取读取房间现状有误 。\n"); break;
case -5: printf("房间现状不合法 。\n");break;
case -6: printf("读取m失败 。\n");break;
case -7: printf("m不合法 。\n");break;
}
return 0;
}
/*
以下是测试文件内容:假定为test.txt
5
....#
.#.@.
.#@..
#....
.....
4
以下是执行程序后的显示:
第0天宿舍状态:
....#
.#.@.
.#@..
#....
.....
第1天宿舍状态:
...@#
.#@@@
.#@@.
#.@..
.....
第2天宿舍状态:
..@@#
.#@@@
.#@@@
#@@@.
..@..
第3天宿舍状态:
.@@@#
.#@@@
.#@@@
#@@@@
.@@@.
第4天宿舍状态:
@@@@#
.#@@@
.#@@@
#@@@@
@@@@@
19
*/
编程C语言流感传染函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于c语言传感器编程、编程C语言流感传染函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 卫滨区网站搭建技巧视频,网站搭建步骤详解
- 视频号的兴趣认证怎么弄,视频号兴趣认证技巧
- asp.net后台执行js,net asp
- 美伢直播工具是什么,网红美伢是哪个公司的
- Python里相减函数 python两数相减取绝对值
- 怎么在房间添加路由器设置,怎么给房间加一个路由器
- 2002年网络游戏前景,2002网游排行榜
- 揭阳网上直播软件排行,揭阳综合频道直播
- go语言程序设计中文 go语言程序设计 epub