#1094 : Lost in the City 找到几个当年c语言留下的坑

来源:互联网 发布:mac拖文件 编辑:程序博客网 时间:2024/05/01 18:46

思路很简单

对于Hi对象的3x3格子,我们需要存储9个位置。我们将九宫格中的中心2x2位置的单独拿出来做判断,若2x2位置的符合,再去匹配其他8个位置。

由于Hi对象可以旋转,因此,对于这8个位置需要用一个一维数组存储八个位置。

在进行遍历操作的时候,需要判断m数组的值是否满足地图数组a的值,并且将a中值旋转的四种状态都要做判断。

当然,做函数式处理,也是很重要的。

//解决的c语言坑见评论

代码如下:

void BuildHi(char** Lhi, char* m1){m1[0] = Lhi[0][0];m1[1] = Lhi[0][1];m1[2] = Lhi[0][2];m1[3] = Lhi[1][2];m1[4] = Lhi[2][2];m1[5] = Lhi[2][1];m1[6] = Lhi[2][0];m1[7] = Lhi[1][0];}bool FixedPosition(int i,int j,char**a,char* m1){if (a[i - 1][j - 1] == m1[0] && a[i-1][j] == m1[1] && a[i-1][j+1] == m1[2] && a[i][j+1] == m1[3] &&a[i+1][j+1] == m1[4] &&a[i+1][j] == m1[5] && a[i+1][j-1] ==m1[6] && a[i][j-1] == m1[7]){return true;}if (a[i - 1][j - 1] == m1[6] && a[i - 1][j] == m1[7] && a[i - 1][j + 1] == m1[0]&& a[i][j + 1] == m1[1] && a[i + 1][j + 1] == m1[2] && a[i + 1][j] == m1[3] &&a[i + 1][j - 1] == m1[4] && a[i][j - 1] == m1[5]){return true;}if (a[i - 1][j - 1] == m1[4] && a[i - 1][j] == m1[5] && a[i - 1][j + 1] == m1[6]&& a[i][j + 1] == m1[7] && a[i + 1][j + 1] == m1[0] && a[i + 1][j] == m1[1] &&a[i + 1][j - 1] == m1[2] && a[i][j - 1] == m1[3]){return true;}if (a[i - 1][j - 1] == m1[2] && a[i - 1][j] == m1[3] && a[i - 1][j + 1] == m1[4]&& a[i][j + 1] == m1[5] && a[i + 1][j + 1] == m1[6] && a[i + 1][j] == m1[7] &&a[i + 1][j - 1] == m1[0] && a[i][j - 1] == m1[1]){return true;}return false;}void LittleHi(){int m, n;int hi = 3;//char Lhi[3][3];//所在位置矩阵char m1[8];//记录两个旋转矩阵scanf("%d%d", &m, &n);char **Lhi = (char**)malloc(sizeof(char*) * 3);for (int i = 0; i < 3; ++i){//为每行分配4个大小空间Lhi[i] = (char*)malloc(sizeof(char) * 3);}//a is mapchar **a = (char**)malloc(sizeof(char*) * m);//为二维数组分配m行for (int i = 0; i < m; ++i){//为每行分配4个大小空间a[i] = (char*)malloc(sizeof(char) * n);}for (int i = 0; i < m; i++){scanf("%s",&a[i][0]);//a[i][j]=getchar();}fflush(stdin);//Lhi自身有四种状态for (int i = 0; i < hi; i++){scanf("%s", &Lhi[i][0]);//Lhi[i][j] = getchar();}BuildHi(Lhi, m1);//遍历匹配 m行 n列for (int i = 1; i < m-1; i++){for (int j = 1; j < n-1; j++){//表示中间单元格相等if (a[i][j] == Lhi[1][1]){if (FixedPosition(i, j, a, m1)){cout << i+1 << " " << j+1 << endl;}}}}}int _tmain(int argc, _TCHAR* argv[]){LittleHi();return 0;}


//指针问题

int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int *b = &a;
//b = &a;
a++;
printf("%d\n",*b);
printf("%d\n",a);
return 0;
}


输出:2

    2



0 0
原创粉丝点击