面试题(来自程序员面试宝典)

来源:互联网 发布:七天网络成绩查询网页 编辑:程序博客网 时间:2024/05/01 23:21

面试例题:输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现?

(中国台湾著名感伤公司2007年11月面试题)

#include <stdio.h>

#include <iostream>

int main()

 int N;
 int s,i,j;
 int squa;
 scanf("%d",&N);

 int **a = (int **)malloc(N*sizeof(int *));       //特别要注意这里的*号
 if(a == NULL)
  return 0;
 for (i=0; i<N; i++)
 {
  if ((a[i] = (int *)malloc(N*sizeof(int))) == NULL)
  {
   while (--i>0)
   {
    free(a[i]);
   }
   free(a);
   return 0;
  }
 }

 squa = N*N;
 for (i=0; i<N; i++)
 {
  for (j=0; j<N; j++)
  {
   s = i + j;
   if (s<N)//三角形,求面积,加上偏移
   {
    a[i][j] = s*(s+1)/2 + (((i+j)%2 == 0) ? i : j);
   }
   else//转换成上面的方式
   {
    s = (N-1-i) + (N-1-j);
    a[i][j] = squa - s*(s+1)/2 -(N-(((i+j)%2)? i : j));
   }
  }
 }

 for (i=0;i<N; i++)
 {
  for (j=0; j<N; j++)
  {
   printf("%6d",a[i][j]);
  }
  printf("\n");
 }

}

这里有一外小问题,就是上面的星号,如果是int型的,结果没有问题。但如果是其它类型结果就去出错。

双重指针要分配内存首先是给*p分配。运行结果如下:

原创粉丝点击