1087 有多少不同的值 20 分

2021-09-23 15:41:57 字數 2124 閱讀 2442

題意描述:

當自然數 n 依次取 1、2、3、……、n 時,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少個不同的值?(注:⌊x⌋ 為取整函式,表示不超過 x 的最大自然數,即 x 的整數部分。)

輸入格式:

輸入給出乙個正整數 n(2≤n≤10^​4​​ )。

輸出格式:

在一行中輸出題面中算式取到的不同值的個數。

輸入樣例:

2017
輸出樣例:

1480
解題思路:

alice: 這道題看起來有點熟悉呀。

bob: 題目做的多了,翻來覆去也就這麼多型別了。

alice: 這題是要去重啊,直接順著題目的邏輯來就行了,遍歷,求值,用set去重,最後輸出集合的大小。

bob: 嘿,咱倆想的一模一樣啊。

alice: 現在覺得那句「人生苦短,我用python」還是有些道理的。python中很多內建物件型別真的是使用頻率很高的啊。比如說set( )

bob: 是啊,c++的話還要再使用模板庫。不過這道題目不用set也能做,就是麻煩一點。

alice: 不用set⊙(・◇・)?用陣列重複打標記,最後在把有標記的值找出來?

bob: 對呀對呀,~ ( ̄▽ ̄)~*

**:

def

main()

: n =

int(

input()

)# 接收輸入的整數n

values =

set(

)# values是乙個集合,用來儲存所有的不同的值

for x in

range(1

, n +1)

:# 當自然數x依次取1 2 3 ... n時

values.add(

int(x /2)

+int

(x /3)

+int

(x /5)

)# 將算式不同的值新增到values當中,由於集合中元素的唯一性,相同的值將只被記錄一次

print

(len

(values)

)# 由於集合中的每個元素都是唯一的,所以集合大小就是不同取值的個數

if __name__ ==

'__main__'

: main(

)

#include

#define nn 10334

// 為什麼是10334 ? 因為 10000 / 2 + 10000 / 3 + 10000 / 5 == 10333.3333...

int flags[nn]

;// 我們使用flags來儲存所有不同算式的值,如某個算式的值是0,就有flags[0] == 1

intmain()

int count =0;

// 計算共有多少個不同的值出現

for(

int i=

0; i < nn;

++i)

}printf

("%d\n"

, count)

;// 輸出共有多少個不同的值

return0;

}

#include

#include

// 使用c++模板set需要先包含此檔案

using namespace std;

// 同樣需要宣告命名空間

intmain()

printf

("%d\n"

, values.

size()

);// 由於集合的特性,集合中沒有重複的元素存在,所以集合的大小就是不同值的個數

return0;

}

易錯點:

總結:

1087 有多少不同的值 20 分

當自然數 n 依次取 1 2 3 n 時,算式 n 2 n 3 n 5 有多少個不同的值?注 x 為取整函式,表示不超過 x 的最大自然數,即 x 的整數部分。輸入給出乙個正整數 n 2 n 10 4 在一行中輸出題面中算式取到的不同值的個數。20171480 include includeusin...

1087 有多少不同的值 20分

當自然數 n 依次取 1 2 3 n 時,算式 n 2 n 3 n 5 有多少個不同的值?注 x 為取整函式,表示不超過 x 的最大自然數,即 x 的整數部分。輸入格式 輸入給出乙個正整數 n 2 n 10 4 輸出格式 在一行中輸出題面中算式取到的不同值的個數。輸入樣例 2017輸出樣例 1480...

1087 有多少不同的值

1087 有多少不同的值 20 分 當自然數 n 依次取 1 2 3 n 時,算式 n 2 n 3 n 5 有多少個不同的值?注 x 為取整函式,表示不超過 x 的最大自然數,即 x 的整數部分。輸入給出乙個正整數 n 2 n 10 4 在一行中輸出題面中算式取到的不同值的個數。20171480 i...