簡體   English   中英

找出包含四個 5 的 5 位數字的個數

[英]Find the number of 5 digit numbers that contain four 5s

我想找到有四個 5 的 5 位數字。 我執行以下操作:

data <- str_split(as.character(x = 10000:99999), pattern = "")

但是當我嘗試查找包含四個 5 的列表數量時

sapply(data, function(x) c("5", "5", "5", "5") %in% data[[x]])它給了我一個錯誤“數據錯誤[[x]] : 1 級沒有這樣的索引":

我究竟做錯了什么? 還有其他更優雅的解決方案嗎?

嘗試這個?

> x <- 10000:99999

> x[nchar(gsub("[^5]", "", x)) == 4 & nchar(x)==5]
 [1] 15555 25555 35555 45555 50555 51555 52555 53555 54555 55055 55155 55255
[13] 55355 55455 55505 55515 55525 55535 55545 55550 55551 55552 55553 55554
[25] 55556 55557 55558 55559 55565 55575 55585 55595 55655 55755 55855 55955
[37] 56555 57555 58555 59555 65555 75555 85555 95555

或者,您可以像下面這樣概括它

# number of digits
n <- 5 
# number of 5s
m <- 4
# output
(x <- 10^(n - 1):(10^n - 1))[nchar(gsub("[^5]", "", x)) == m]
grep('^(?=.{5}$).*?(5)(.*?\\1){3}', 10000:99999, value = TRUE, perl=TRUE)

 [1] "15555" "25555" "35555" "45555" "50555" "51555" "52555" "53555"
 [9] "54555" "55055" "55155" "55255" "55355" "55455" "55505" "55515"
[17] "55525" "55535" "55545" "55550" "55551" "55552" "55553" "55554"
[25] "55555" "55556" "55557" "55558" "55559" "55565" "55575" "55585"
[33] "55595" "55655" "55755" "55855" "55955" "56555" "57555" "58555"
[41] "59555" "65555" "75555" "85555" "95555"

正則表達式解釋:

使用前瞻來確定數字是否包含五位數字。 ^(?=.{5}$) 然后判斷是否有 4 個 5 的.*?(5)(.*?\\1){3}

這會是一個替代方案嗎? 不確定您是否明確需要字符。

c(10000:99999)[grep("5.555|55.55|555.5|5555", 10000:99999 )]

 [1] 15555 25555 35555 45555 50555 51555 52555 53555 54555 55055 55155 55255
[13] 55355 55455 55505 55515 55525 55535 55545 55550 55551 55552 55553 55554
[25] 55555 55556 55557 55558 55559 55565 55575 55585 55595 55655 55755 55855
[37] 55955 56555 57555 58555 59555 65555 75555 85555 95555

這應該讓你開始。 它將從表達式中提取所有 5。

 library(stringr)
 y <- str_extract("ouih555aioj5dhjao", "[5]+" )

這將是一種方式:

library(dplyr)
library(tibble)
enframe(10000:99999) %>% 
    mutate(
        name = 10000:99999,
        value = as.character(value),
        value = str_split(value, '')
    ) %>% 
    unnest(value) %>% 
    filter(value == 5) %>% 
    count(name) %>% 
    filter(n == 4) %>%
    select(-n)
# A tibble: 44 x 1
    name
   <int>
 1 15555
 2 25555
 3 35555
 4 45555
 5 50555
 6 51555
 7 52555
 8 53555
 9 54555
10 55055
# ... with 34 more rows

我認為最簡單的是

5*9-1
# 44

這是有效的,因為在五位數字中,恰好一位不是五位(剩下四個五位)。 對於每個非五位數字,它可以取 9 個不同值中的任何一個(即 0 到 9,除了 5)。 然后我們減去 1,因為我們不允許 05555,這將是一個四位數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM