日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

一道面试题引发的关于程序设计的想法

發(fā)布時(shí)間:2025/3/20 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一道面试题引发的关于程序设计的想法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

面試題一:

大廳里有100盞燈,每盞燈都編了號(hào)碼,分別為1-100。每盞燈由一個(gè)開關(guān)來控制。(開關(guān)按一下,燈亮,再按一下燈滅。開關(guān)的編號(hào)與被控制的燈相同。)開始時(shí),燈是全滅的。現(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次對(duì)燈的操作

????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ù)不亮怎么辦呢?

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


作者:二本二

來源:51CTO

總結(jié)

以上是生活随笔為你收集整理的一道面试题引发的关于程序设计的想法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。