Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Given a programming language where you could make as many variables up as possible and you could only perform these three operators find b-1.

a=0;
b++;
loop(c){  // This loop will loop exactly c times

}

an example to find the number 2.

a = 0;
a ++;
a ++; // 2

How would you find b-1, where b is any positive integer? There are no signed numbers in this language.

share|improve this question
    
Initialize a to 0 and then {increment and test for equality with b-1} in the loop? –  alancalvitti Mar 16 '13 at 1:35
    
@alancalvitti: There's no test for equality. –  joriki Mar 16 '13 at 1:35
1  
Please don't vandalize questions. –  robjohn Mar 16 '13 at 3:47

3 Answers 3

It seems that the trick to this question is that for c = 0, loop(c){} loops zero times, ie does nothing. Therefore the following program will work:

a=0;
c=0;
loop(b){
  loop(c){
    a++;
  }
  c=0;
  c++;
}

We end up with b-1 in a.

share|improve this answer
    
Very nice solution. –  joriki Mar 16 '13 at 1:40
a = 0;    
b = 5;   //Random number
c = 0;

loop(b){
  a = c;    
  c ++;    
}

//c holds value 5    
//a holds value 4
share|improve this answer
    
You can't use b = 5, a = c, only setting to zero is allowed. –  Thomas Mar 16 '13 at 7:28
1  
@Thomas The statement b=5 is irrelevant, but the statement a=c can easily be replaced by a=0; loop(c) {a++;}, making this similar to the other answer but IMO a bit more standard to programmers (it's the same logic used to crawl to the end of a data structure). –  Erick Wong Mar 16 '13 at 7:53

Similar to aws's answer, but I found easier to reason about:

c=0;
loop(b){
  a=0;
  // at the beginning of the loop, c lags the counter by 1
  loop(c){
    a++;
  }
  // at the end of the loop, c == counter
  // in the last loop, c is set to b but 'a' still lags by 1
  c++;
}

This answer is obviously less efficient, looping something like (b-2) + (b-3) + ... + (b-b) more times.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.