2016-11-18 12 views
5

मैं 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) 

क्या कोई इस तरह के अनुक्रम उत्पन्न करने के बारे में जानता है?

उत्तर

4

आसानी generalizable

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 
+0

अच्छा दृष्टिकोण बनाएगा !! –

3

शायद generalizable नहीं है, लेकिन

> 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 
+0

अच्छा अनुक्रम के पहले n पदों प्राप्त करने के लिए उत्तर - लेकिन कोड का एक स्पष्टीकरण लोगों को यह समझने में मदद करता है कि वे क्या कर रहे हैं। एक नौसिखिया को पता नहीं हो सकता कि 'सी' का अर्थ क्या है, या' seq' में सभी तर्क क्या हैं। – Addison

1

मैं प्रोग्रामिंग भाषा है कि आप प्रयोग कर रहे हैं में इसे लागू आप तर्क प्रदान कर रहा हूँ।

#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++ लागू;

+0

यह तर्क काम करता है? केवल जब मैं == 2 आप 3 बार बार बढ़ रहे हैं तो इसे केवल 1 दाएं से बढ़ाया जाएगा? क्या मुझे यह गलत मिला? –

+0

हां यह काम करेगा क्योंकि मैं मान 2 को हार्डकोड नहीं कर रहा हूं लेकिन इसके बजाय मैं तुलना करने के लिए शुरू कर रहा हूं। और हाँ यह किसी भी शुरू होने वाले मूल्य के लिए काम करेगा। @ joel.wilson – PassionInfinite

+0

सवाल आर भाषा के बारे में था सी ++ – Uwe

6

पहले 3 & के बीच 65 और है कि बस का चयन वैकल्पिक जोड़े से सभी नंबरों को बनाने के आर में रीसाइक्लिंग का उपयोग करना,! और उसके बाद 2 इसे संलग्न करें।

वैकल्पिक जोड़े का चयन करने के लिए, मैं निम्नलिखित पैटर्न का चयन करता हूं: सी (गलत, गलत, सही, सत्य) जैसे कि पहले 2 अस्वीकार कर दिए जाते हैं और अगले 2 स्वीकार किए जाते हैं। उदाहरण के लिए ग (3,4,5,6) [सी (, गलत गलत, सही, सही)] का मतलब है कि 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 में मेरा पहला काम :)

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 
+0

# joel.wilson सर समाधान के लिए धन्यवाद, बहुत सराहना की, आप अनुरोध कर सकते हैं कि आप सी (एफ, एफ, टी, टी) की व्याख्या करें। –

1

इस प्रयास करें, हमारे पास

enter image description here

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 
+1

आर में गणितीय परिचालन वेक्टरकृत हैं, इसलिए 'sapply' की कोई ज़रूरत नहीं है। बहुत बेहतर 'x <-1: n; 2 + as.integer (x/2) * 3 + as.integer ((x-1)/2)'। – nicola

+0

सुनिश्चित करें कि यह तेज़ी से –

संबंधित मुद्दे