前言

  上一篇《C算法编程题(一)扑克牌发牌》

  写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文《谈谈外企涨工资那些事》,里面楼主讲到外企公司包含的五类人,其实不只是外企如此,私企和合资的都是如此,一些公司反正什么人都有,就怕你的上司是第一种,你的同事是第二种。这种搭配最讨人厌,反正技术和工作效率不怎么样,“做人”还蛮会做的。其实不管公司怎样,同事怎样,工作环境怎样。就像里面楼主说的,都要坚持自己选择的路,并坚持走下去。。。

  这几天都在博园逛一些技术大牛的博客,也买了本相关的数,在博园主要看些设计模式之类的,看了很是心血澎湃,真的希望自己有一天也可以写一些之类的文章。昨天下了一位园友写的一个权限管理系统,里面用到了mvc、ef、easyui和一些设计模式,自己接下来要好好研究下。其实一直有个想法是,希望可以把.net底层搞透,并整理一套属于自己的框架,慢慢优化下去,就像胡哥一样。完成这些,虽死无憾,哈哈哈。。。

  说的有点多了,会到正题,我一开始写这类算法编程题的时候,一是想可以帮到开始学习算法编程的同学们,二是锻炼自己的脑细胞,希望死的不要太多。还有就是写这些编程题和C++其实没什么关系,只是用简单的语法实现功能而已,重要的是逻辑思路,大家也可以看成是奥数题。

  网上看到一套趣味编程题,希望接下来可以一一和大家分享。

程序要求

  程序描述:

  从键盘输入一个整数(1~20)
    则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
    输入数字2,则程序输出:
    1 2
    4 3
    输入数字3,则程序输出:
    1 2 3
    8 9 4
    7 6 5
    输入数字4, 则程序输出:
     1   2   3  4
    12  13  14  5
    11  16  15  6
    10   9   8  7

程序实现

  这个编程题大家可能都做过,算是比较经典的算法编程题了,当然也有很多的实现方法,这里我讲一种。

  我们先分析下,这个题目主要是输出数字螺旋,我们可以看成是四个方向:

  1,左-->右

  2,上-->下

  3,右-->左

  4,下-->上

  而且这四个方向的数字是依次递增的,那我们可以这样思考,整个输出是一个二维数组,行和列数是一样的,比如输入4,那1-12就是第一圈,12-16就是第二圈,每一圈又分四个方向。

  我们可以先这样定义:

1     int num[80][80];
2     int i,j;
3     int rows,quan;

  num数组表示的是输出的数组,rows就是行列数,也就是我们输入的值,quan表示的是螺旋的圈数,i表示的是螺旋上的数字,j等下我们程序中讲,我们代码可以这样写:

 1     scanf("%d",&rows);
 2     quan=0;
 3     for(i=1;i<=rows*rows;quan++)
 4     {
 5         if(i==rows*rows)
 6             num[(rows-1)/2][(rows-1)/2]=i++;
 7         else
 8         {
 9             for(j=quan;j<rows-1-quan;j++)
10                 num[quan][j]=i++;
11             for(j=quan;j<rows-1-quan;j++)
12                 num[j][rows-quan-1]=i++;
13             for(j=rows-1-quan;j>quan;j--)
14                 num[rows-quan-1][j]=i++;
15             for(j=rows-1-quan;j>quan;j--)
16                 num[j][quan]=i++;
17         }
18     }

  最外层的for是循环圈数的意思,里面if是判断最后一圈是不是单独的数字,就像行数如果是3,那最后一圈就只要一个数字9,下面四个for就是代表的上面说的四个方向。大家看下代码就懂得,这里我就不多说了。

  大家可能有更好的实现方式,希望可以多多交流,

  完整程序代码:

 1 #include "stdio.h"
 2 #include "string.h"
 3 #include "stdlib.h"
 4
 5 void main()
 6 {
 7     int num[80][80];
 8     int i,j;
 9     int rows,quan;
10
11     scanf("%d",&rows);
12     quan=0;
13     for(i=1;i<=rows*rows;quan++)
14     {
15         if(i==rows*rows)
16             num[(rows-1)/2][(rows-1)/2]=i++;
17         else
18         {
19             for(j=quan;j<rows-1-quan;j++)
20                 num[quan][j]=i++;
21             for(j=quan;j<rows-1-quan;j++)
22                 num[j][rows-quan-1]=i++;
23             for(j=rows-1-quan;j>quan;j--)
24                 num[rows-quan-1][j]=i++;
25             for(j=rows-1-quan;j>quan;j--)
26                 num[j][quan]=i++;
27         }
28     }
29
30     for(i=0;i<rows;i++)
31     {
32         for(j=0;j<rows;j++)
33         {
34             printf("%4d",num[i][j]);
35         }
36         printf("\n");
37     }
38 }

View Code

  运行结果:

转载于:https://www.cnblogs.com/xishuai/p/3398799.html

C算法编程题(二)正螺旋相关推荐

  1. C算法编程题(四)上三角

    前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个"上三角",有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微 ...

  2. system verilog编程题_拼多多2020校招部分算法编程题合集

    拼多多2020校招部分算法编程题2道,多多的魔术盒子和多多的排列函数 其实根据他的匹配职位我们可以看到,这5道题的难度还是并不高,只是作为一个初步筛选,我这边选择了前两道跟大家分享 [编程题一] 多多 ...

  3. 【面试锦囊】14种模式搞定面试算法编程题(1-7)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  4. 【面试锦囊】14种模式搞定面试算法编程题(8-14)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  5. C算法编程题(七)购物

    前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...

  6. 14种模式解决面试算法编程题(PART I)

    万万没想到,暑假还没开始,有些公司的秋招提前批已经来了-很慌-数据结构和算法题可以说是秋招笔试面试必考的内容,如果你还不够熟练(just like me),那就要从现在开始疯狂刷题了啊朋友们. 附上我 ...

  7. 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)

    原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...

  8. java二维数组模拟用户登录_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)...

    这里分享三道编程题, 下面是我个人的视频讲解我的解题思路以及代码运行演示https://www.zhihu.com/video/1253424180936724480 1. 编程实现以下需求: 定义一 ...

  9. 股票交易日(动态规划)----美团2016研发工程师编程题(二)

    [编程题] 股票交易日 在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行).给出一天中的股票变化序列,请写一个程序计算 ...

最新文章

  1. 机械毕业本科生竟被嵌入式单片机公司录取?
  2. 一个NODE_ENV 引发的血案
  3. 微信tocken后台后台保存方法
  4. mysql服务怎么改名字_MySQL数据库改名字
  5. nodejs+webpack+vue以及npm安装对应的库
  6. php中mysqli 处理查询结果集的几个方法
  7. 华东理工计算机与金融专业,2019年华东理工大学各专业录取分数线
  8. Java 8实战 第一章笔记
  9. arm-linux-gcc 和Makefile
  10. android缩放动画后,Android ObjectAnimator:缩放后动画填充
  11. 单片机第1季:零基础学51单片机-蜂鸣器介绍
  12. 基于完成例程的重叠I/O网络模型
  13. Python生信练习——hg38每条染色体基因,转录本的分布
  14. 学习方法推荐——时间管理
  15. 视觉SLAM十四讲 第9讲 后端1 贝叶斯法则 式9.5推导
  16. 微众银行再次入驻微信小程序,人人可申请,66万人提额100亿,发福利啦!!!...
  17. DB2将DETACH下来的临时表ATTACH到分区表报错SQL20307N SQLSTATE=428GE
  18. python把英语句子成分字母_(完整版)英语句子成分分析大全
  19. 计算机硬件技术基础课程主要内容,计算机硬件技术基础课程设计.doc
  20. MNIST数据集下载+idx3-ubyte解析【超详细+上手简单】

热门文章

  1. javascrip --- 构造函数的继承
  2. 7 useLayoutEffect、useDebugValue
  3. day1||python
  4. (转载)Qt中MOC的一些限制
  5. openssl工具的使用以及创建私有CA
  6. a与a:link、a:visited、a:hover、a:active
  7. SQL SERVER 中identity
  8. 邮件联系人,如何恕不部分字母就能显示邮件联系人
  9. 花里胡哨,不协调统一的界面,正如看到一个穿花里胡哨衣服的人,让人作呕,不想接近。...
  10. OSPF协议概述(一)