藍橋杯 演算法訓練 最大最小公倍數

2021-10-09 19:33:01 字數 2001 閱讀 7231

問題描述

已知乙個正整數n,問從1~n中任選出三個數,他們的最小公倍數最大可以為多少。

輸入格式

輸入乙個正整數n。

輸出格式

輸出乙個整數,表示你找到的最小公倍數。

樣例輸入

9樣例輸出

504資料規模與約定

1 <= n <= 106。

分析與解

首先,對題目所給資訊進行分析:

1、分析資料結構方面

題目給出的資訊,是求最大的最小公倍數,那麼就要按照盡可能大的結果,來考慮儲存時所要用到的資料結構。

先考慮輸入的資料n,因為他的範圍是1~10的6次方,在int的表示範圍之內,所以採用int來儲存n即可。

其次,,n的最大值是10^6,那麼最大的最小公倍數應該在10的18次方左右,所以不能直接儲存(因為long long 型的資料也儲存不下),所以採用陣列儲存最終的 最大最小公倍數。

由於採用陣列儲存最終值,勢必要用到模餘運算,那麼最終值儲存與輸出時可能會存在偏差----非最高位時,每個陣列元素單元的數,要按照規定的位數輸出---->存在要考慮補 0 的情況。為了方便實現,我把這個輸出模組,用乙個單獨的輸出函式來實現:

int

print

(int k)

//可能需要補0的情況

printf

("%d"

,a[k]);

for(i=k-

1;i>=

1;i--)}

}return0;

}

因為要求的是最大的 最小公倍數,所以3個數一定不能隨意尋找。要保證其最小公倍數的值最大,用來求公倍數的每個數都要盡可能的大,要具體的分情況討論:

a、最大的數----即n是奇數時,因為相鄰的奇數的最大公約數均為1,那麼可以選取n、n-1、n-2,這3個數求最小公倍數,所得結果即為所求值

b、最大數----即n是偶數時,初步考慮,所選用的數應該是n、n-1、n-3,(因為n-2偶數)。

但是,仔細分析會發現,可能出現意外情況。例如,n和n-3是相差,如果n為3的倍數,那麼n-3也會是3 的倍數,這時候用n、n-1、n-3,就得不到最大得最小公倍數。

所以應該將n是偶數時候的情況,再進行分情況討論:

①n不是3的倍數時,這個時候,n、n-1、n-3這3個數的乘積,就是所求的就是最大的最小公倍數

②n是3的倍數時,這時候,應該果斷捨棄n,將最大的數選取位n-1,那麼就回歸到了最大數是奇數的情況,所得的最終乘積,才符合「最大的最小公倍數」

源**如下(藍橋杯測試通過):

#include

int a[10]

;//int k;//記錄儲存在a中的值,所佔的最大的陣列元素的下標值

intcount

(int n,

int m,

int k,

int flag)

for(j=n;j>=m;j--)if

(cf!=0)

//存在進製

}return k;

}int

print

(int k)

//可能需要補0的情況

printf

("%d"

,a[k]);

for(i=k-

1;i>=

1;i--)}

}return0;

}int

multiple

(int n)

else

//偶數

else

//是3的倍數

}print

(k);

//呼叫函式實現輸出

return0;

}int

main()

補充:其實,我覺得這道題目用到的不是貪心的思想,而是動態規劃的思想。因為如果輸入的n是偶數,又是3的倍數的情況下,最終所選取的3個數中,就沒有選擇n,而是選擇了n-1,這明顯是動態規劃的解題思路。如有不妥,請指教!

藍橋杯 演算法訓練 最大最小公倍數

演算法訓練 最大最小公倍數 時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9 樣例輸出 504資料規模與約定 1 n 106。...

藍橋杯 演算法訓練 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。參考 當n為奇數時,答案一定是n n 1 n 2 當n為偶數時,答案是n a ...

藍橋杯 演算法訓練 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。思路 首先,從題目的資料規模可以看出題目存在乙個特殊的情形,就是當n小於3的時...