今天在一個IT網站看到一個小程序,題目是輸入一整數,在小於這個整數的序列中能組成多少個互不相同且無重複數字的三位數?
看了一眼這個程序,我的第一反應就是用幾個for循環就搞定了,然後看了文章裏對這個程序的解法也是幾個for循環。如下:
int count = 0;
for (int i = 1; i <= N; i++)
{
for (int j = 0; j <= N; j++)
{
for (int k = 0; k <= N; k++)
{
if (k != j && k != i && j != i)
{
++count;
}
}
}
}
一個小程序用了三個for循環,輸入的數的大小直接決定着運行的時間,O(N^3),這樣做未免太浪費時間了。
其實,這種題目,在高中的時候數學課上沒少做,就是簡單的排序組合,樓主居然第一反應沒想到用數學方法來解,看來這麼多年後,真的是有些東西就淡忘了,
如果用數學的排列組合方法來解只需要一行程序就搞定了。個數就是N*N*(N-1)
int count = 0;
count = N*N*(N-1);
雖然只是一個小程序,還是看出來很多時候編程的時候數學思想已經淡薄了,看到一道編程題目,第一反應都不是用數學思想去解決,這個大家要引以爲戒啊!