473,854 Members | 1,512 Online

# Programming Puzzle

I found these questions on a web site and wish to share with all of u
out there,Can SomeOne Solve these Porgramming puzzles.
Programming Puzzles

Some companies certainly ask for these things. Specially Microsoft.
Here are my favorite puzzles. Don't send me emails asking for the
solutions.

Q1 Write a "Hello World" program in 'C' without using a semicolon.
Q2 Write a C++ program without using any loop (if, for, while etc) to
print numbers from 1 to 100 and 100 to 1;
Q3 C/C++ : Exchange two numbers without using a temporary variable.
Q4 C/C++ : Find if the given number is a power of 2.
Q5 C/C++ : Multiply x by 7 without using multiplication (*) operator.
Q6 C/C++ : Write a function in different ways that will return f(7) =
4 and f(4) = 7
Q7 Remove duplicates in array
Q8 Finding if there is any loop inside linked list.
Q9 Remove duplicates in an no key access database without using an
array
Q10 Write a program whose printed output is an exact copy of the
source. Needless to say, merely echoing the actual source file is not
allowed.
Q11 From a 'pool' of numbers (four '1's, four '2's .... four '6's),
each player selects a number and adds it to the total. Once a number
is used, it must be removed from the pool. The winner is the person
whose number makes the total equal 31 exactly.
Q12 Swap two numbers without using a third variable.
Given an array (group) of numbers write all the possible sub groups of
this group.
Q14 Convert (integer) number in binary without loops.

Q3,12 are similar , Q7 is simple & I know there answer For the Rest
Nov 14 '05
271 20404
Da*****@cern.ch (Dan Pop) wrote in message news:<cb******* ***@sunnews.cer n.ch>...

<snip>
My point was that it is sheer nonsense to say "you'll get a warning about
that" if the standard doesn't *require* a diagnostic.
It is one thing to point out what the standard says, what messages
should be there, etc. It is another thing to get into a harsh argument

I entirely agree that the code deserves a diagnostic, even when compiled
in C99 mode, but this is something completely different.

Dan

Nov 14 '05 #191
"Dan Pop" <Da*****@cern.c h> wrote in message
news:cb******** **@sunnews.cern .ch...
In <a7************ **************@ posting.google. com> fo******@yourem ailbox.com (Foobarius Frobinium) writes:
Da*****@cern.c h (Dan Pop) wrote in message news:<cb******* ****@sunnews.ce rn.ch>...
In <zo************ ****@newssvr27. news.prodigy.co m> "Mabden" <mabden@sbc_glo bal.net> writes:
>"Foobarius Frobinium" <fo******@youre mailbox.com> wrote in message
>news:a7******* *************** ****@posting.go ogle.com...
>> js*******@sanch arnet.in (Jatinder) wrote in message
news:<22******* *************** ****@posting.go ogle.com>...
>> You mentioned MS often use these sorts of puzzles to test their
>> programmers. I got an even better one to stump even the best MS
>> programmers:
>> #include <stdio.h>
>>
>> int main(void) {
>> int *foo = NULL;
>>
>> fprintf(stdout, "%i\n", *foo);
>> }
>>
>> What will happen if I compile and run this program??
>
>You'll get a warning saying main() has no return value.

Well, you should, depending on compiler flags.

Sez who?
gcc -Wall gives you:

foo.c: In function `main':
foo.c:10: warning: control reaches end of non-void function

Add a -std=c99 to your gcc invocation and the warning goes away.

My point was that it is sheer nonsense to say "you'll get a warning about
that" if the standard doesn't *require* a diagnostic.

I entirely agree that the code deserves a diagnostic, even when compiled
in C99 mode, but this is something completely different.

Actually, it is the OP's question that I answered.

Q. "What will happen if I compile and run this program??"
A. "You'll get a warning saying main() has no return value."

Do you see a question about standards or committees? No, just "what will
happen". So I showed a specific case of what would happen. Others have
reported their results of what happened.

Theory was not requested, not a specific implementation. On my box, that is
what will happen.

YMMV! ;-) Lighten up, Dan.

--
Mabden
Nov 14 '05 #192
In <nV************ *******@newssvr 29.news.prodigy .com> "Mabden" <mabden@sbc_glo bal.net> writes:
"Dan Pop" <Da*****@cern.c h> wrote in message
news:cb******* ***@sunnews.cer n.ch...
In <a7************ **************@ posting.google. com>fo******@youre mailbox.com (Foobarius Frobinium) writes:
>Da*****@cern.c h (Dan Pop) wrote in messagenews:<cb****** *****@sunnews.c ern.ch>... >> In <zo************ ****@newssvr27. news.prodigy.co m> "Mabden"<mabden@sbc_gl obal.net> writes: >>
>> >"Foobarius Frobinium" <fo******@youre mailbox.com> wrote in message
>> >news:a7******* *************** ****@posting.go ogle.com...
>> >> js*******@sanch arnet.in (Jatinder) wrote in message
>> news:<22******* *************** ****@posting.go ogle.com>...
>> >> You mentioned MS often use these sorts of puzzles to test their
>> >> programmers. I got an even better one to stump even the best MS
>> >> programmers:
>> >> #include <stdio.h>
>> >>
>> >> int main(void) {
>> >> int *foo = NULL;
>> >>
>> >> fprintf(stdout, "%i\n", *foo);
>> >> }
>> >>
>> >> What will happen if I compile and run this program??
>> >
>> >You'll get a warning saying main() has no return value.
>>
>
>Well, you should, depending on compiler flags.

Sez who?
>gcc -Wall gives you:
>
>foo.c: In function `main':
>foo.c:10: warning: control reaches end of non-void function

Add a -std=c99 to your gcc invocation and the warning goes away.

My point was that it is sheer nonsense to say "you'll get a warning about
that" if the standard doesn't *require* a diagnostic.

I entirely agree that the code deserves a diagnostic, even when compiled
in C99 mode, but this is something completely different.

Actually, it is the OP's question that I answered.

Q. "What will happen if I compile and run this program??"
A. "You'll get a warning saying main() has no return value."

Do you see a question about standards or committees? No, just "what will
happen". So I showed a specific case of what would happen. Others have
reported their results of what happened.

The OP question was generic! He didn't ask "what will happen if *you*
compile and run this program?", did he? You can't provide an equally
must be based on the C language definition.

Furthermore, the specific behaviour of one compiler or another is usually
considered off topic in this newsgroup, you need a *good* reason for
Theory was not requested, not a specific implementation. On my box, that is
what will happen. ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
Did the OP ask what will happen on *your* box? If not, what *exactly* is
was not about a specific implementation?
YMMV! ;-) Lighten up, Dan.

Stop behaving like an idiot and I'll lighten up ;-)

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 14 '05 #193
In <c3************ **************@ posting.google. com> sc************@ comcast.net (Scott Jacobsen) writes:
Ioannis Vranos <iv*@guesswh.at .grad.com> wrote in message news:<cb******* ****@ulysses.no c.ntua.gr>...
int main (void)
{
if (printf("Hello World")) {}

/* Only needed for C90 compliance */
if (exit(EXIT_SUCC ESS),1){}
}
Here was my less elegant solution. But I didn't even use anything that
looks like a ';'. (commas look a lot like semicolons...) :)

#include <stdio.h>
#include <stdlib.h>

int main() {
while(printf("h ello\n") && 0) {
}
while(((int (*)(int))(exit) )(0) || 1) {}

^^^^^^^^^^^^^^^ ^^^^^^^^^^
Undefined behaviour. You can convert the address of exit to an
incompatiple function pointer type, but you cannot dereference the
result without invoking undefined behaviour. Your code is akin to
calling exit() without including <stdlib.h> in C89: you can't call
a void function as if it were an int function.

It is not possible to call a void function in such a program without
using the comma operator. Fortunately, no C or C++ standard requires
the function main to terminate through an exit call or a return statement.
}

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 14 '05 #194
Ioannis Vranos wrote:

That said, I would not place the equality/inequality check for the
possibility of the same variable passed in mind, but for efficiency.

If you have efficiency in mind, you better leave out the comparison
until tests show that the 'problem' it solves really happens that
often, that it makes a difference.

In any ordinary program one would not expect that special case to
happen very often. I would estimate around 1 out of 100 where this
'optimization' shortcut really is taken. That means: you slow down
99 cases just to speed up 1 case.

Same with the comparison for equality in an operator= (Sorry for
being off topic in comp.lang.c). If it is written exception safe,
there is no need for the test with 'this'. Especially not for
optimizaztion, since the case you are optimizing doesn't happen
that often in any typical program. But all other cases suffer
from a needless comparison.

--
Karl Heinz Buchegger
Nov 14 '05 #195
In <jk************ *************** *****@4ax.com> Irrwahn Grausewitz <ir*******@free net.de> writes:
<my two cents>

1. Technically, the discussion is about objects, identifiers that
designate/denote objects (aka variable names in C++), and values.
Nope, the discussion was about "variables" .
5. I suggest to drop the term "variable" all together, *especially* in
cross-posts between c.l.c and c.l.c++, since it's not defined at
all in the C standard and IMHO somewhat vaguely defined in the C++
standard.

As long as c.l.c is still an imperfect ivory tower (i.e. it still has
connections with the real world) it is highly unrealistic to ignore
popular CS jargon terms like "variable" and "global", simply because the
C standard itself doesn't use them.

By the time c.l.c is officially decreed a select club of initiated
regulars, there would be no need to ban these terms, because no one would
use them, anyway.

I guess similar considerations apply to c.l.c++...

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 14 '05 #196
Dan Pop wrote:
sc************@ comcast.net (Scott Jacobsen) writes:
Here was my less elegant solution. But I didn't even use anything that
looks like a ';'. (commas look a lot like semicolons...) :)

#include <stdio.h>
#include <stdlib.h>

int main() {
while(printf("h ello\n") && 0) {
}
while(((int (*)(int))(exit) )(0) || 1) {}

^^^^^^^^^^^^^^^ ^^^^^^^^^^
Undefined behaviour. You can convert the address of exit to an
incompatiple function pointer type, but you cannot dereference the
result without invoking undefined behaviour. Your code is akin to
calling exit() without including <stdlib.h> in C89: you can't call
a void function as if it were an int function.

It is not possible to call a void function in such a program without
using the comma operator. Fortunately, no C or C++ standard requires
the function main to terminate through an exit call or a return statement.

Yeah. I know. But it works on my system :) And exit never returns, so there
is no reason to worry about the return value (or lack there of). All you
have to worry about is that the next instruction is that start of the exit
function. After that nothing matters.

--
Scott
Nov 14 '05 #197
On Mon, 28 Jun 2004 04:16:52 +0300, Ioannis Vranos wrote:
Given an array (group) of numbers write all the possible sub groups of
this group.

std::next_perm utation and std::prev_permu tation. An example:
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
using namespace std;

string s="abcd";
do
cout<<s<<endl;
while(next_perm utation(s.begin (), s.end()));
}

and if
unsigned s={12222, 839939, 9393999, 9099999, 98394763, 89383883};
Next_permutatio n is ok?
if not for me next_permutatio n==fuochino, deve essere modificata
esiste una soluzione non ricorsiva
Nov 14 '05 #198
On Thu, 01 Jul 2004 16:14:31 GMT, RoSsIaCrIiLoIA <n@esiste.ee> wrote:
On Mon, 28 Jun 2004 04:16:52 +0300, Ioannis Vranos wrote:
> Given an array (group) of numbers write all the possible sub groups of
> this group.std::next_per mutation and std::prev_permu tation. An example:
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
using namespace std;

string s="abcd";
do
cout<<s<<endl;
while(next_perm utation(s.begin (), s.end()));
}

and if
unsigned s={12222, 839939, 9393999, 9099999, 98394763, 89383883};
Next_permutati on is ok?

unsigned *s = {12222, 839939, 9393999, 9099999, 98394763, 89383883};
if not for me next_permutatio n==fuochino, deve essere modificata
esiste una soluzione non ricorsiva

it is wrong excuse me
Nov 14 '05 #199
Da*****@cern.ch (Dan Pop) wrote:
In <jk************ *************** *****@4ax.com> Irrwahn Grausewitz <ir*******@free net.de> writes:
1. Technically, the discussion is about objects, identifiers that ^^^^^^^^^^^ designate/denote objects (aka variable names in C++), and values.
Nope, the discussion was about "variables" .

Then, pray tell, how is the term "variable" defined, WRT to the C
language? Those who were using it were actually talking about named
objects, *technically*. However, except for C++, the term variable
isn't officially defined to mean "named object".
As long as c.l.c is still an imperfect ivory tower (i.e. it still has
connections with the real world) it is highly unrealistic to ignore
popular CS jargon terms like "variable" and "global", simply because the
C standard itself doesn't use them.

It's indeed highly unrealistic to expect everyone to avoid those
terms. However, a quick look in the archives shows that the use of
correct, well-defined terms, instead of sloppy jargon, serves well to
reduce the risk of confusion. What's wrong with object, external
linkage, file scope, etc.pp., after all?

Regards
--
Irrwahn Grausewitz (ir*******@free net.de)
welcome to clc: http://www.ungerhu.com/jxh/clc.welcome.txt
clc faq-list : http://www.faqs.org/faqs/C-faq/faq/
clc OT guide : http://benpfaff.org/writings/clc/off-topic.html
Nov 14 '05 #200

This thread has been closed and replies have been disabled. Please start a new discussion.