我想創建一個從2開始到65結束的序列,它先增加3,然後增加1,然後增加3,然後增加1,依此類推,給出看起來像這樣的最終結果:如何生成一個交替遞增的序列
sequence(2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57,58,61,62,65)
有沒有人知道如何去產生這樣一個序列?
我想創建一個從2開始到65結束的序列,它先增加3,然後增加1,然後增加3,然後增加1,依此類推,給出看起來像這樣的最終結果:如何生成一個交替遞增的序列
sequence(2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46,49,50,53,54,57,58,61,62,65)
有沒有人知道如何去產生這樣一個序列?
容易普及
begin = 2
end = 65
d = c(3, 1)
l = length(d)
cumsum(c(begin, rep(d, len = (end-l)/l)))
[1] 2 5 6 9 10 13 14 17 18 21 22 25 26 29 30 33 34 37 38 41 42 45 46 49 50 53 54 57 58 61 62 65
也許不是普及,但
> sort(c(seq(2,65,4), seq(5,65,4)))
[1] 2 5 6 9 10 13 14 17 18 21 22 25 26 29 30 33 34 37 38 41 42 45 46 49 50 53 54 57 58 61 62 65
好答案 - 但對代碼的解釋有助於人們理解他們在做什麼。一個新手可能不知道'c'的意思,或者'seq'中的所有參數意味着什麼。 – Addison
我提供你的邏輯實現它在你所使用的編程語言。
#include <iostream>
using namespace std;
int main() {
int start = 2, end = 65;
std::cout << start;
cout<<"\n";
for(int i=start;i<=end;i++){
if(i == start){
cout<<i+3;
cout<<"\n";
i +=3;
}else{
cout<<i;
cout<<"\n";
}
}
return 0;
}
實現在C++;
做這個邏輯工作?只有當我== 2你遞增3其餘的時間,它會增加只有1右?我弄錯了嗎? –
是的,它會工作,因爲我不是硬編碼值2,而是我正在使用開始比較。是的,它會適用於任何開始結束價值。 @ joel.wilson – PassionInfinite
問題是關於R語言而不是C++ – Uwe
在R中使用回收利用,首先創建3 & 65之間的所有數字,並從中選擇備用對!然後將2連接到它。要選擇替代對,我選擇以下模式:c(FALSE,FALSE,TRUE,TRUE),使前2個被拒絕,接下來2個被接受。 例如C(3,4,5,6)[C(FALSE,FALSE,TRUE,TRUE)]表示3,4被拒絕和5,6-接受
c(2,c(3:65)[c(F,F,T,T)])
[1] 2 5 6 9 10 13 14 17 18 21 22 25 26 29 30 33 34 37 38 41 42 45 46 49 50 53 54 57 58 61 62
[32] 65
由於我的工作在Rcpp上,我認爲應該就此進行探索。感謝這個問題。在RCPP完成了我的第一個任務:)
library(Rcpp)
cppFunction('NumericVector func(int start, int end){
int j = 0;
int len = ceil((end-start)/2);
if (end%2 != 0){
len+=1;
}
Rcpp::NumericVector result(len);
result[j++] = start;
int i = start;
while(j <= len){
if (j%2 == 0){
result[j++] = i+1;
i+=1;
}
else {
result[j++] = i+3;
i+=3;
}
}
return result;
}')
> func(2,65)
[1] 2 5 6 9 10 13 14 17 18 21 22 25 26 29 30 33 34 37 38 41 42 45 46 49 50 53 54 57 58 61 62 65
> func(2,20)
[1] 2 5 6 9 10 13 14 17 18
> func(1,10)
[1] 1 4 5 8
#joel.wilson先生謝謝你的解決方案非常感謝,請求你可以請你解釋c(F,F,T,T)。 –
試試這個來獲取序列的前n項,我們有
n <- 32 # get first 32 terms
x <- 1:n
2+as.integer(x/2)*3+as.integer((x-1)/2)
# [1] 2 5 6 9 10 13 14 17 18 21 22 25 26 29 30 33 34 37 38 41 42 45 46
# 49 50 53 54 57 58 61 62 65
R中的數學運算是矢量化的,所以不需要'sapply'。好得多的x <-1:n; 2 + as.integer(x/2)* 3 + as.integer((x-1)/ 2)'。 – nicola
肯定會讓它更快 –
不錯的做法! –