2012-03-14 13 views
6

का उपयोग करके घटाव को कार्यान्वित करने के लिए यह एक साक्षात्कार प्रश्न है। हम केवल दो निर्माणोंकेवल लूप और वृद्धि

  1. loop(a) एक समय के लिए पाश का मतलब है।
  2. increment(a) वृद्धि एक।

इस प्रकार एक + लागू करने के लिए बी एक

loop(a) {inc(b)} 
return b; 

लिख सकता है प्रश्न एक-ख लागू करने के लिए कैसे है।

+0

नहीं। मैंने साक्षात्कार-प्रश्नों को टैग किया है। – Neal

+0

मुझे लगता है कि यह असंभव है; आपको एक नकारात्मक या कमी समारोह की आवश्यकता है –

+0

संभवतः आपके पास कुछ तुलनात्मक कार्य भी उपलब्ध हैं, हां? यदि आपका एकमात्र निर्माण वास्तव में लूप और वृद्धि है, तो मुझे लगता है कि यह असंभव है, लेकिन ब्रांचिंग के साथ आप इसे काम कर सकते हैं। –

उत्तर

9

कैसे करें;

a = 10 
b = 8 
result = 0 

loop(b) { 
    last = 0 
    times = 0; 
    loop(a) { 
     last = times 
     times = inc(times) 
    } 
    result = a = last 
} 

result is 2 

जेएस उदाहरण;

var a = 10; 
var b = 8; 
var result; 

for (var _b = 0; _b < b; _b++) { 
    var last = 0, times = 0, loopa = 0; 
    for (var _a = 0; _a < a; _a++) { 
     last = times; 
     times = inc(times); 
    } 
    result = a = last; 
} 

function inc(i) { 
    return i + 1; 
} 

print(result) // 2 
+0

यदि एक = 2 ​​यह 0 प्रिंट करता है तो आपको एक नकारात्मक कार्य की आवश्यकता है। –

+0

ऐय यह नकारात्मक संख्याओं को फर्श करेगा, लेकिन जैसा कि आप प्राप्त कर सकते हैं उतना करीब मुझे लगता है कि –

0

हम एक्स की तलाश में हैं, ताकि ए-बी = एक्स। दूसरे शब्दों में a = b + x

स्यूडोकोड

पूर्णांक x = 0

जबकि (एक्स < = क) कर {

अगर (ख + x == एक) BREAK // संतुष्ट अब = एक्स

x ++

}

1

निर्भर करता है अगर यह संख्यात्मक वास्तुकला में जाना जाता है:

आप x86/x64 वास्तुकला के "दो तारीफ" तंत्र का लाभ ले सकते,

उदाहरण के लिए

, अगर हस्ताक्षर किए नंबर योजना चक्रीय है की तरह।

f(0 < x < 32768)  = x 
f(32769 < x < 65535) = x - 65536 

तो आप का उपयोग कर सकते हैं:

dec(a) 
{ 
    loop(65535 [= 2^16-1]) { inc(a) } 
} 

बड़ी चलनी को सुलझाने के रूप में

(a-b) 
{ 
    loop(b) { dec(a) } 
} 

हस्ताक्षर योजना अलावा लगातार बदल सकते हैं, लघु, लंबे, बड़े पूर्णांक प्रकार के लिए एक ही पर निर्भर करता है।

आशा है कि यह अच्छा है :) शुभकामनाएँ।

3

मुझे लगता है कि अगर पाश से तोड़ने की अनुमति दी है, एक-ख इस तरह से किया जा सकता है:

c=0; 
loop(a) { 
    if (a==b) break; 
    inc(c); 
    inc(b); 
} 
return c; 

संभालने एक> ख बेशक।

+1

पर कोई अस्वीकृति नहीं है, लेकिन फिर, आप केवल लूप() और inc() का उपयोग कर सकते हैं। आप == ऑपरेटर का उपयोग नहीं कर सकते हैं। –

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