日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一道面試題引發(fā)的關(guān)于程序設(shè)計(jì)的想法

申明:這是在看到園子里兩個(gè)帖子關(guān)于兩道面試編程題之后個(gè)人的一點(diǎn)想法

創(chuàng)新互聯(lián)專注于汨羅網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供汨羅營銷型網(wǎng)站建設(shè),汨羅網(wǎng)站制作、汨羅網(wǎng)頁設(shè)計(jì)、汨羅網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造汨羅網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供汨羅網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

面試題一:

大廳里有100盞燈,每盞燈都編了號(hào)碼,分別為1-100。每盞燈由一個(gè)開關(guān)來控制。(開關(guān)按一下,燈亮,再按一下燈滅。開關(guān)的編號(hào)與被控制的燈相同。)開始時(shí),燈是全滅的?,F(xiàn)在按照以下規(guī)則按動(dòng)開關(guān)。
***次,將所有的燈點(diǎn)亮。
第二次,將所有2的倍數(shù)的開關(guān)按一下。
第三次,將所有3的倍數(shù)的開關(guān)按一下。
以此類推。第N次,將所有N的倍數(shù)的開關(guān)按一下。
問第100次按完以后,大廳里還有幾盞燈是亮的。

看到這道題后我馬上想怎樣編程去實(shí)現(xiàn)這個(gè)問題

這道題不復(fù)雜很快我就想到一個(gè)實(shí)現(xiàn)的辦法,首先我寫了一個(gè)winform程序,界面用來展示各個(gè)燈***的狀態(tài)

***版的代碼如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

private void Form1_Load(object sender, EventArgs e)

{

    //燈的集合 Dictionary<燈的序號(hào),燈的狀態(tài)(0:滅,1:亮)>

    Dictionary<int, int> dicLight = new Dictionary<int,int>();

    //添加100盞燈

    for (int i = 1; i <= 100; i++)

        dicLight.Add(i, 0);

    //100次對燈的操作

    for (int i = 1; i <= 100; i++)

    {

        if (i == 0)

            //把全部燈點(diǎn)亮

            for (int j = 1; j <= 100; j++)

                dicLight[j] = 1;

        else

            for (int k = 1; k <= 100; k++)

                if (k % i == 0)

                    dicLight[k] = dicLight[k] == 1 ? 0 : 1;

    }

    //循環(huán)所有燈并在界面上展示

    foreach (KeyValuePair<int, int> param in dicLight)

        txtLightStates.Text += "第" + param.Key + "盞燈狀態(tài)為:" + (param.Value == 0 ? "滅" : "亮")+"\r\n";

}

以下是運(yùn)行結(jié)果

所以這就完了? 當(dāng)然不是,然后我想到如果燈的數(shù)量跟要操作的次數(shù)是可變的呢,然后我開始重構(gòu)這個(gè)方法,把可變的參數(shù)提取出來作為方法參數(shù)

修改后的代碼如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

private void Form1_Load(object sender, EventArgs e)

   {

   }

   public Dictionary<int, int> ChangeLightState(int lightNum, int changeLightNum)

   {

       //燈的集合 Dictionary<燈的序號(hào),燈的狀態(tài)(0:滅,1:亮)>

       Dictionary<int, int> dicLight = new Dictionary<int, int>();

       //添加N盞燈

       for (int i = 1; i <= lightNum; i++)

           dicLight.Add(i, 0);

       //N次燈的操作

       for (int i = 1; i <= changeLightNum; i++)

       {

           if (i == 1)

               //把全部燈點(diǎn)亮

               for (int j = 1; j <= lightNum; j++)

                   dicLight[j] = 1;

           else

               for (int k = 1; k <= lightNum; k++)

                   if (k % i == 0)

                       dicLight[k] = dicLight[k] == 1 ? 0 : 1;

       }

       return dicLight;

   }

   private void btnStartCal_Click(object sender, EventArgs e)

   {

       int lightNum=0,changeLightNum=0;

       int.TryParse(txtLightNum.Text,out lightNum);

       int.TryParse(txtChangeLightNum.Text,out changeLightNum);

       Dictionary<int, int> dicLight = ChangeLightState(lightNum, changeLightNum);

       //循環(huán)所有燈并在界面上展示

       foreach (KeyValuePair<int, int> param in dicLight)

           txtLightStates.Text += "第" + param.Key + "盞燈狀態(tài)為:" + (param.Value == 0 ? "滅" : "亮") + "\r\n";

   }

下面是運(yùn)行界面跟結(jié)果

看過《大話設(shè)計(jì)模式》的同學(xué)都知道到這里肯定沒完,比果我要實(shí)現(xiàn)2的倍數(shù)亮,3的倍數(shù)不亮怎么辦呢?

下面的留給各位自己想象去吧


網(wǎng)頁名稱:一道面試題引發(fā)的關(guān)于程序設(shè)計(jì)的想法
本文路徑:http://www.5511xx.com/article/dpiphsj.html