自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#.Net面試官問:漢諾塔算法

開發(fā) 前端
如果大于1個碟片,假設(shè)為n。則遵循先把n-1個碟片從小到大的順序從柱子1借助柱子3挪到柱子2,然后把剩余的最后一個碟片從柱子1挪到柱子3,最后把柱子2的n-1個碟片從小到大的順序借助柱子1挪到柱子3,完成整個過程。

前言

現(xiàn)在不僅各大編程語言卷,也順帶感染了C#的內(nèi)卷。有人面試被問到,漢諾塔算法.這個算法比較有意思。網(wǎng)上C語言較多,本篇來看下C#。

概括

漢諾塔,據(jù)說一個古印度的黃金碟片的游戲。把一根柱子上疊好的一堆碟片從小到大的順序,借助第二根柱子挪到第三根柱子上。

注意這里有幾個點(diǎn)
其一:碟片的數(shù)量
其二:三根柱子
其三:從小到大借助挪動
其四:小碟片必須在大碟片之上,任何一個。

應(yīng)該如何做呢?碟片的數(shù)量未知,這里假設(shè)為n(int)。三根柱子(字符類型),第一根柱子one,第二根柱子two,第三根柱子three。作為參數(shù),可以構(gòu)建如下函數(shù),函數(shù)名為:Hannuo:

static void Hannuo(int n, char one, char two, char three)
{
}

柱子之間碟片的挪動,另取一個函數(shù),用以記錄:

static void move(char x, char y)
{
    Console.Write(x + "->" + y + "\r\n");
}

假設(shè)只有一個碟片,直接從柱子1挪到柱子3即可,所以函數(shù)里面需要判斷下:

static void Hannuo(int n, char one, char two, char three)
{
    if (n == 1) move(one, three);
}

如果大于1個碟片,假設(shè)為n。則遵循先把n-1個碟片從小到大的順序從柱子1借助柱子3挪到柱子2,然后把剩余的最后一個碟片從柱子1挪到柱子3,最后把柱子2的n-1個碟片從小到大的順序借助柱子1挪到柱子3,完成整個過程。完成代碼如下:

static void Hannuo(int n, char one, char two, char three)
{
     if (n == 1) move(one, three);
     else
     {
        Hannuo(n - 1, one, three, two);
        move(one, three);
        Hannuo(n - 1, two, one, three);
     }
}

整個的代碼:

static void Hannuo(int n, char one, char two, char three)
{
    if (n == 1) move(one, three);
    else
    {
         Hannuo(n - 1, one, three, two);
         move(one, three);
         Hannuo(n - 1, two, one, three);
    }
}
static void move(char x, char y)
{
    Console.Write(x + "->" + y + "\r\n");
}
static void Main(string[] args)
{
    Hannuo(3, 'A', 'B', 'C');
    Console.ReadLine();
}

這里的Main函數(shù),里面?zhèn)鬟f了3個碟片,然后分別以字符串A,B,C代表三根柱子,進(jìn)行碟片移動最終的結(jié)果是如下:

圖片圖片

三個碟片在三根柱子,A,B,C上進(jìn)行了7次挪動。其它以此類推。這里面主要是遞歸算法。

責(zé)任編輯:武曉燕 來源: 江湖評談
相關(guān)推薦

2021-12-02 18:20:25

算法垃圾回收

2022-04-18 10:01:07

Go 語言漢諾塔游戲

2021-11-08 09:18:01

CAS面試場景

2024-07-26 08:47:07

2021-12-25 22:31:10

MarkWord面試synchronize

2021-12-16 18:38:13

面試Synchronize

2010-08-23 15:06:52

發(fā)問

2021-01-06 05:36:25

拉鏈表數(shù)倉數(shù)據(jù)

2021-05-11 21:56:11

算法清除JVM

2022-01-05 09:55:26

asynawait前端

2023-02-20 08:08:48

限流算法計數(shù)器算法令牌桶算法

2024-08-19 09:13:02

2009-08-28 09:29:02

2024-06-04 07:38:10

2020-07-28 00:58:20

IP地址子網(wǎng)TCP

2009-08-25 13:53:20

C#.NET rege

2009-08-26 14:23:14

C#.Net Fram

2021-03-24 10:25:24

優(yōu)化VUE性能

2022-11-04 08:47:52

底層算法數(shù)據(jù)

2023-06-05 07:57:53

Kafka消息事務(wù)消息
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號