• 面试题一(蛇形输出)


    题目的要求很简单,就是输出这样一个蛇形矩阵。。。
    这道题是在面试亚马逊实习生时遇到的,当初的思路是针对每行元素的增加个数来编程,不过现在来想,按照每行元素增加的话要考虑的因素就太多了,不如这样以元素坐标来思考,来的简单明了。
    下面以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("输入元素个数:
    ");
       scanf("%d",&n);
       //构造指针数组
       a = (int**)malloc(sizeof(int*) * n);
       //为指针分配空间
       for(int i = 0; i < n; i++)
          a[i] = (int*)malloc(sizeof(int) * n);
       printf("蛇形矩阵是:
    );
       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("
    ");
              }
     }
  • 相关阅读:
    冲刺周期第一天
    05构建之法阅读笔记之三
    第十周进度表
    问题账户需求分析
    2016年秋季个人阅读计划
    课后作业--1:《软件需求与分析》博文读后感
    《人月神话》阅读笔记--3
    《人月神话》阅读笔记--02
    《人月神话》阅读笔记--01
    个人总结
  • 原文地址:https://www.cnblogs.com/idealing/p/3379630.html
Copyright © 2020-2023  润新知