面试题一(蛇形输出)

题目的要求很简单,就是输出这样一个蛇形矩阵。。。
这道题是在面试亚马逊实习生时遇到的,当初的思路是针对每行元素的增加个数来编程,不过现在来想,按照每行元素增加的话要考虑的因素就太多了,不如这样以元素坐标来思考,来的简单明了。
下面以4阶矩阵为例:
由上图可得规律:
①坐标之和i + j = k - 1;
②k为奇数时,i为减,j为增;偶数时,i为增,j为减;
③当k <= n 时,元素坐标以0为起点递增(相应另一坐标递减),元素个数递增;
④当k > n 时,元素坐标以n - 1为起点递减(相应另一坐标递增),元素个数递减;
比较难实现的是体现k > n 时的情况,用两个变量完成,一个累计每行元素个数,一个表示元素坐标(当然还有k表示行,count表示元素总个数)
#include<stdio.h>
#include<stdlib.h>
void print(int** a,int n);
int main(int args,char* argv[])
{
   int n;
   int** a;
   printf("输入元素个数:\n");
   scanf("%d",&n);
   //构造指针数组
   a = (int**)malloc(sizeof(int*) * n);
   //为指针分配空间
   for(int i = 0; i < n; i++)
      a[i] = (int*)malloc(sizeof(int) * n);
   printf("蛇形矩阵是:\n);
   print(a,n);
   free(a);
   return 0;
}
void print(int **a,int n)
  {
          int i,j,k,count = 0;
          for(k = 1; k <= n; k++)
          {
                 if(k % 2 == 0)
                         for(i = 0; i < k; i++)
                         {
                                 count++;
                                  a[i][k-1-i] = count;
                          }
                 if(k % 2 == 1)
                         for(i = 0 ;i < k; i++)
                         {
                                 count++;
                                 a[k-1-i][i] = count;
                          }
         }
          for(; k <= 2 * n - 1 ; k++)
          {
                  if(k % 2 == 1)
                           for(i = n - 1,j = 1;j <= 2 * n - k ;j++, i--)
                          {
                                  count++;
                                  a[i][k-1-i] = count;
                           }
                   if(k % 2 == 0)
                           for(i = n - 1,j = 1;j <= 2 * n - k ;j++, i--)
                          {
                                   count++;
                                  a[k-1-i][i] = count;
                         }
           }
           for(i = 0; i < n; i++)
           {
                  for(j = 0; j < n; j++)
                           printf("%4d",a[i][j]);
                           printf("\n");
          }
 }

 

posted @ 2013-10-20 22:11  idealing  阅读(966)  评论(0编辑  收藏  举报