天天看點

C算法程式設計題(四)上三角

前言

  上一篇《C算法程式設計題(三)畫表格》

  上幾篇說的都是根據要求輸出一些字元、圖案等,今天就再說一個“上三角”,有點類似于第二篇說的正螺旋,輸出的字元少了,但是邏輯稍微複雜了點。

程式描述

  方陣的主對角線之上稱為“上三角”。

    請你設計一個用于填充n階方陣的上三角區域的程式。填充的規則是:使用1,2,3….的自然數列,從左上角開始,按照順時針方向螺旋填充。

    例如:當n=3時,輸出:

    1 2 3

    6 4

    5

    當n=4時,輸出:

    1  2 3 4

    9 10 5

    8  6

    7

    當n=5時,輸出:

      1  2  3  4  5

     12 13 14  6

     11 15  7

     10  8

      9

    程式運作時,要求使用者輸入整數n(3~20)

    程式輸出:方陣的上三角部分。

    要求格式:每個資料寬度為4,右對齊。

程式實作

   上三角和正螺旋的圖形很相似,不同的是上三角輸出的圖形是從對角線斜過來的。

  接下來,我們看看能不能從上三角圖形中找些規律,有規律、把思路理清了,我們才能更容易用程式來實作所需功能。

  首先我們會發現,輸出的上三角和我們輸入的行有關,如果輸入5行,那就15個數,也就是輸入N行,就輸出N*(N+1)/2個數;其次和正螺旋一樣都是依次遞增的,從上三角圖形我們可以看到,遞增分為三個方向;左->右、右上->左下、下->上。

  先貼下代碼:

1         for(j=1;j<=N*(N+1)/2;low++,hi--)
2         {
3             for(i=low;i<hi-low;i++)
4                 a[low][i]=j++;
5             for(i=low+1;i<hi-low;i++)
6                 a[i][hi-i-1]=j++;
7             for(i=(hi-low)-2;i>low;i--)
8                 a[i][low]=j++;
9         }      

  a表示的是輸出的二維數組,N表示輸入的行數,hi表示的是列的個數,初始化和N一樣,N*(N+1)/2表示的就是上三角的個數,low表示的圈數,這三個for循環的意思就是上面說的三個方向,語句很簡單主要是怎麼利用參數來表示輸出數組的下标。

  話不言多,大家慢慢體會,如果有更好的實作方法,歡迎交流。。。

  完整代碼:

C算法程式設計題(四)上三角
C算法程式設計題(四)上三角
1 #include "stdio.h"
 2 #include "string.h"
 3 #include "stdlib.h"
 4 
 5 int main()
 6 {
 7     int low,i,j,hi,N;
 8     int a[80][80];
 9     while(scanf("%d",&N))
10     {
11         if(N==0)
12             break;
13         low=0;
14         hi=N;
15         for(j=1;j<=N*(N+1)/2;low++,hi--)
16         {
17             for(i=low;i<hi-low;i++)
18                 a[low][i]=j++;
19             for(i=low+1;i<hi-low;i++)
20                 a[i][hi-i-1]=j++;
21             for(i=(hi-low)-2;i>low;i--)
22                 a[i][low]=j++;
23         }
24         for(i=0;i<N;i++)
25         {
26             for(j=0;j<N-i;j++)
27                printf("%4d ",a[i][j]);
28             printf("\n");
29         }
30     }
31     return 0;
32 }      

View Code

  運作結果:

作者:田園裡的蟋蟀

微信公衆号:你好架構

出處:http://www.cnblogs.com/xishuai/

公衆号會不定時的分享有關架構的方方面面,包含并不局限于:Microservices(微服務)、Service Mesh(服務網格)、DDD/TDD、Spring Cloud、Dubbo、Service Fabric、Linkerd、Envoy、Istio、Conduit、Kubernetes、Docker、MacOS/Linux、Java、.NET Core/ASP.NET Core、Redis、RabbitMQ、MongoDB、GitLab、CI/CD(持續內建/持續部署)、DevOps等等。

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。

分享到:

QQ空間

新浪微網誌

騰訊微網誌

微信

更多

繼續閱讀