95992828九五至尊2

C算法编程题

四月 9th, 2019  |  882828九五至尊手机版

前言

  上一篇《C算法编制程序题(二)正螺旋

  写东西前依然拥戴作弄点东西,要不然写的真还没看头,一贯的想法是在新浪把团结攻读和行事时候整理的东西写出来和大家大快朵颐,就像是前边写的《T-Sql学习体系》,当然那些只是符合初大家,之后还有许多多级,写那一个事物的指标:一是确实能够帮到那一个初学者;二是祥和回过头去回想那么些已经的记念,毕竟工作了,也没充裕时间了。

  提及时刻,真的还没时间,那段日子店铺的品类要上线,都相比较忙,真的好后悔前段时间未有去美丽看看书,前两日买了两本书《CLCR-VVIA
C#》和《漫谈设计方式》,小编的想法是现行反革命攻读设计形式的,说实话是确实想学,以往的路也是想走这一条。不过在博园看了某个设计方式相关的稿子,发现设计情势有时候会波及到底层的事物,高校时候只是学的C#这门语言,没怎么讲framework相关的事物,所以才买了这本书,希望得以恶补下,还有学习尤其权限管理体系连串的安插,未来发现真正有众多事要做,不多说了,希望团结能够熬过那段时间。

  发现自身今后还真是有点啰嗦,打住~~~。

  今日说的这么些题材和上1个大多,也是通过自然的逻辑输出东西的。

前言

  上一篇《C算法编程题(壹)扑克牌发放营业牌照

  写东西前线总指挥部是喜欢戏弄一些东西,依旧多啰嗦几句吧,上午看了一篇博文《座谈国有集团涨薪俸那些事》,里面楼主讲到国有集团公司涵盖的5类人,其实不只是国有公司如此,私营企业和合营的都以如此,一些集团反正哪个人都有,就怕您的上级是首先种,你的同事是第二种。那种搭配最讨人厌,反正技术和工效不如何,“做人”还蛮会做的。其实不管公司怎样,同事怎么着,工作条件怎样。就像是里面楼主说的,都要持之以恒本身采取的路,并坚称走下来。。。

  这几天都在博园逛1些技艺大腕的博客,也买了本有关的数,在博园首要看些设计方式之类的,看了很是心血澎湃,真的愿意本人有一天也能够写一些等等的文章。昨日下了壹个人园友写的1个权力管理连串,里面用到了mvc、ef、easyui和局地设计格局,自个儿接下去要过得硬研商下。其实一向有个想法是,希望得以把.net底层搞透,并整理一套属于自身的框架,稳步优化下去,就如胡哥一样。实现这几个,虽死无憾,哈哈哈。。。

  说的有个别多了,会到正题,我壹开始写那类算法编制程序题的时候,壹是想能够帮到开端学习算法编制程序的同室们,2是久经考验自身的脑细胞,希望死的决不太多。还有正是写这一个编程题和C++其实没什么关系,只是用简单的语法达成效益而已,主要的是逻辑思路,我们也足以当作是奥数题。

  网上看到一套趣味编制程序题,希望接下去能够壹一和豪门大快朵颐。

程序供给

  程序描述:

  在中文言Windows环境下,控制台窗口中也能够用特殊符号拼出美丽的表格来。
    比如:        
        ┌─┬─┐
        │  │  │
        ├─┼─┤
        │  │  │
        └─┴─┘        
    其实,它是由如下的标记拼接的:
        左上 = ┌
        上 =  ┬
        右上 =  ┐
        左 =  ├
        中心 =  ┼
        右 =  ┤
        左下=  └
        下 =  ┴
        右下 =  ┘
        垂直 =  │
        水平 =   ─
    本标题供给编辑二个顺序,依据用户输入的行、列数画出相应的表格来。
    例如用户输入:
    3 2
    则程序输出:
    ┌─┬─┐
    │  │  │
    ├─┼─┤
    │  │  │
    ├─┼─┤
    │  │  │
    └─┴─┘
    用户输入:
    2 3
    则程序输出:
    ┌─┬─┬─┐
    │  │  │  │
    ├─┼─┼─┤
    │  │  │  │
    └─┴─┴─┘

先后供给

  程序描述:

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

程序实现

  看到那几个题材,大家大概首先想到的是,这一个标记用数组存储,笔者也是那般思虑的,就好像上个正螺旋有四个趋势同样,这一个标题大家得以这么思索,那个表格能够分成八个区域,上、中、下和中等空白区域,那我们得以用数组那样表示:

1     char *on[4] = { "┌", "─", "┬", "┐" };
2     char *center[4] = { "├", "─", "┼", "┤" };
3     char *down[4] = { "└", "─", "┴", "┘" };
4     char *space[2] = { "│", "  " };

  符号大家表示好了,那样我们就能够经过表格把区域分掉,来发现里头的法则。

  就会发现,其实输出的时候大家也足以分区域输出:顶部区域、中部区域和尾巴部分区域。顶部和尾部区域是相比较好出口的,笔者先贴下那七个区域的出口代码:

 1     //输出顶部字符
 2     for (i = 0; i < 2 * lines + 1; i++)
 3     {
 4         if (i == 0)
 5             printf("%s",on[0]);
 6         else if (i == 2 * lines)
 7             printf("%s",on[3]);
 8         else
 9         {
10             if (i % 2 == 0)
11                 printf("%s",on[2]);
12             else
13                 printf("%s",on[1]);
14         }
15     }
16     printf("\n");
17     //输出底部字符
18     for (i = 0; i < 2 * lines + 1; i++)
19     {
20         if (i == 0)
21             printf("%s",down[0]);
22         else if (i == 2 * lines)
23             printf("%s",down[3]);
24         else
25         {
26             if (i % 2 == 0)
27                 printf("%s",down[2]);
28             else
29                 printf("%s",down[1]);
30         }
31     }
32     printf("\n");

  rows和lines分别代表的是出口表格的行数和列数,顶部和底部区域输出的代码小编就不多说了,大家结合表和代码就能够知晓了,那里本人说下核心区域。

  其实当仲阳上下区域差不多,只不过是当心和空白交替的,比如行数是叁,那中部区域正是:空、中、空、中、空;假设行数是二,中部区域为:空、中、空;

  发现这几个规律我们代码能够这么写;

 1     //输出中间字符
 2     for (i = 0; i < 2 * rows - 1; i++)
 3     {
 4         if ((i + 1) % 2 == 0)
 5         {
 6             for (j = 0; j < 2 * lines + 1; j++)
 7             {
 8                 if (j == 0)
 9                     printf("%s",center[0]);
10                 else if (j == 2 * lines)
11                     printf("%s",center[3]);
12                 else
13                 {
14                     if (j % 2 == 0)
15                         printf("%s",center[2]);
16                     else
17                         printf("%s",center[1]);
18                 }
19             }
20         }
21         else
22         {
23             for (k = 0; k < 2 * lines + 1; k++)
24             {
25                 if ((k + 1) % 2 == 0)
26                     printf("%s",space[1]);
27                 else
28                     printf("%s",space[0]);
29             }
30         }
31         printf("\n");
32     }

  卯月空的出口逻辑和顶部和尾巴部分的输出逻辑是大半的。

  这些标题若是您思路清楚的话,是非常粗大略的。假诺我们也有更加好的兑现方式,欢迎交换。。。

 

  完毕程序代码:

图片 1图片 2

 1 #include "stdio.h"
 2 #include "string.h"
 3 
 4 void main()
 5 {
 6     char *on[4] = { "┌", "─", "┬", "┐" };
 7     char *center[4] = { "├", "─", "┼", "┤" };
 8     char *down[4] = { "└", "─", "┴", "┘" };
 9     char *space[2] = { "│", "  " };
10     int rows, lines;
11     int i, j, k;
12     //printf("%c",on[0]);
13     scanf("%d",&rows);
14     scanf("%d",&lines);
15 
16     //输出顶部字符
17     for (i = 0; i < 2 * lines + 1; i++)
18     {
19         if (i == 0)
20             printf("%s",on[0]);
21         else if (i == 2 * lines)
22             printf("%s",on[3]);
23         else
24         {
25             if (i % 2 == 0)
26                 printf("%s",on[2]);
27             else
28                 printf("%s",on[1]);
29         }
30     }
31     printf("\n");
32 
33     //输出中间字符
34     for (i = 0; i < 2 * rows - 1; i++)
35     {
36         if ((i + 1) % 2 == 0)
37         {
38             for (j = 0; j < 2 * lines + 1; j++)
39             {
40                 if (j == 0)
41                     printf("%s",center[0]);
42                 else if (j == 2 * lines)
43                     printf("%s",center[3]);
44                 else
45                 {
46                     if (j % 2 == 0)
47                         printf("%s",center[2]);
48                     else
49                         printf("%s",center[1]);
50                 }
51             }
52         }
53         else
54         {
55             for (k = 0; k < 2 * lines + 1; k++)
56             {
57                 if ((k + 1) % 2 == 0)
58                     printf("%s",space[1]);
59                 else
60                     printf("%s",space[0]);
61             }
62         }
63         printf("\n");
64     }
65 
66     //输出底部字符
67     for (i = 0; i < 2 * lines + 1; i++)
68     {
69         if (i == 0)
70             printf("%s",down[0]);
71         else if (i == 2 * lines)
72             printf("%s",down[3]);
73         else
74         {
75             if (i % 2 == 0)
76                 printf("%s",down[2]);
77             else
78                 printf("%s",down[1]);
79         }
80     }
81     printf("\n");
82 }

View Code

  运营结果:

图片 3

 

程序实现

  这几个编制程序题大家恐怕都做过,算是相比经典的算法编制程序题了,当然也有广大的落到实处际意况势,那里自个儿讲1种。

  大家先分析下,那几个题材首假如出口数字螺旋,大家能够看做是多少个方向:

  1,左–>右

  2,上–>下

  3,右–>左

  4,下–>上

  而且那一个样子的数字是逐一递增的,那大家得以这么思虑,整个输出是2个贰维数组,行和列数是1模壹样的,比如输入四,那1-1二正是第1圈,1贰-1六便是第三圈,每1圈又分多少个方向。

  大家得以先那样定义:

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,那最后一圈就即使四个数字玖,上边七个for正是意味着的地方说的八个样子。我们看下代码就清楚,那里笔者就不多说了。

  咱们可能有越来越好的贯彻格局,希望得以多多交换,

  完整程序代码:

图片 4图片 5

 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

  运营结果:

图片 6

 

Your Comments

近期评论

    功能


    网站地图xml地图