#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define LINE 20
#define LIE 30
#define LIE2 31
void actual(int n[LINE][LIE]);
int main(int argc, char * argv[])
{
FILE * fpin, * fpout;
int n[LINE][LIE];
char ch[LINE][LIE + 1];
char STR[10] = {' ', '.', ',', ':', '~', '*', '=', '&', '%', '#'};
int i, j;
if (argc < 3)
{
fprintf(stderr, "error1!\n");
exit(EXIT_FAILURE);
}
if ((fpout = fopen(argv[2], "r+")) == NULL || (fpin = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "error2!\n");
exit(EXIT_FAILURE);
}
for (int i = 0; i < 20; i++)
for (int j = 0; j < 30; j++)
while (fscanf(fpin, "%d", &n[i][j]) != 1)
fscanf(fpin, "%*c");
actual(n);
for (int i = 0; i < 20; i++)
{
for (int j = 0; j < 30; j++)
printf("%d", n[i][j]);
printf("\n");
}
actual(n);
actual(n);
for(i=0;i<20;i++)
{
for(j=0;j<30;j++)
ch[i][j]=* (STR+n[i][j]);
ch[i][30]='\0';
fprintf(fpout, "%s\n", ch[i]);
printf("%s\n",ch[i]);
}
if (fclose(fpin) != 0 || fclose(fpout) != 0)
{
fprintf(stderr, "error!\n");
exit(EXIT_FAILURE);
}
return 0;
}
void actual(int n[LINE][LIE])
{
int h, j, k, l;//测试是否差大于一
int u, i, o, p;//用来整数
int q, w;
int sum;
int nn = 0;
for (q = 0; q < 20; q++)
for (w = 0; w < 30; w++)
{
u = i = o = p = 0;
if (q > 0)
{
u = n[q - 1][w];
nn++;
if (abs(n[q][w] - n[q - 1][w]) > 1)
h = 1;
else
h = 0;
}
else
h = 1;
if (q < 20)
{
i = n[q + 1][w];
nn++;
if (abs(n[q + 1][w] - n[q][w]) > 1)
j = 1;
else
j = 0;
}
else
j = 1;
if (w > 0)
{
o = n[q][w - 1];
nn++;
if (abs(n[q][w - 1] - n[q][w]) > 1)
k = 1;
else
k = 0;
}
else
k = 1;
if (w < 30)
{
p = n[q][w + 1];
nn++;
if (abs(n[q][w + 1] - n[q][w]) > 1)
l = 1;
else
l = 0;
}
else
l = 1;
sum = u + i + o + p;
if (h == 1 && j == 1 && k == 1 && l == 1)
n[q][w] = sum / nn;
nn = 0;
}
}