Sam has got three daughters. The eldest daughter is the most honest girl in the universe and she always speaks truth. The middle daughter is a modest woman. She speaks truth and lies according to the situations. The youngest one never speaks truth. Not a single word she spoke was true and would never be true.
Sam brought a marriage proposal for one of his girls. It was John. John wanted to marry either the eldest or the youngest daughter of Sam as he can easily identify whether the girl speaks truth or lie!
John told his desire to Sam. However, Sam laid a condition. He told John that he will not say who the eldest, middle or youngest one is. Also, he allowed John to ask only one question to identify the eldest or youngest so he can marry one.
John asked one question and found the right girl. What was the question and whom should he pick?

The question he asked is, 'Is she older than her?'
He asks this question to one of the daughters.
If he asked this question to older daughter pointing at other two, he probably would know the youngest one! NO matter, she always speaks truth.
If he asked the question to middle one, probably he can choose either.
If he asked the youngest one, she always lies and he can find eldest one. No matter, he has to choose the youngest one based on the answer.

You are on a gameshow and the host shows you three doors. Behind one door is a suitcase with $1 million in it, and behind the other two doors are sacks of coal. The host tells you to choose a door, and that the prize behind that door will be yours to keep.
You point to one of the three doors. The host says, "Before we open the door you pointed to, I am going to open one of the other doors." He points to one of the other doors, and it swings open, revealing a sack of coal behind it.
"Now I will give you a choice," the host tells you. "You can either stick with the door you originally chose, or you can choose to switch to the other unopened door."
Should you switch doors, stick with your original choice, or does it not matter?

You should switch doors.
There are 3 possibilities for the first door you picked:
You picked the first wrong door - so if you switch, you win
You picked the other wrong door - again, if you switch, you win
You picked the correct door - if you switch, you lose
Each of these cases are equally likely. So if you switch, there is a 2/3 chance that you will win (because there is a 2/3 chance that you are in one of the first two cases listed above), and a 1/3 chance you'll lose. So switching is a good idea.
Another way to look at this is to imagine that you're on a similar game show, except with 100 doors. 99 of those doors have coal behind them, 1 has the money. The host tells you to pick a door, and you point to one, knowing almost certainly that you did not pick the correct one (there's only a 1 in 100 chance). Then the host opens 98 other doors, leave only the door you picked and one other door closed. We know that the host was forced to leave the door with money behind it closed, so it is almost definitely the door we did not pick initially, and we would be wise to switch.
Search: Monty Hall problem

What is the least number of people that need to be in a room such that there is greater than a 50% chance that at least two of the people have the same birthday?

Only 23 people need to be in the room.
Our first observation in solving this problem is the following:
(the probability that at least 2 people have the same birthday + the probability that nobody has the same birthday) = 1.0
What this means is that there is a 100% chance that EITHER everybody in the room has a different birthday, OR at least two people in the room have the same birthday (and these probabilities don't add up to more than 1.0 because they cover mutually exclusive situations).
With some simple re-arranging of the formula, we get:
the probability that at least 2 people have the same birthday = (1.0 - the probability that nobody has the same birthday)
So now if we can find the probability that nobody in the room has the same birthday, we just subtract this value from 1.0 and we'll have our answer.
The probability that nobody in the room has the same birthday is fairly straightforward to calculate. We can think of this as a "selection without replacement" problem, where each person "selects" a birthday at random, and we then have to figure out the probability that no two people select the same birthday. The first selection has a 365/365 chance of being different than the other birthdays (since none have been selected yet). The next selection has a 364/365 chance of being different than the 1 birthday that has been selected so far. The next selection has a 363/365 chance of being different than the 2 birthdays that have been selected so far.
These probabilities are multiplied together since each is conditional on the previous. So for example, the probability that nobody in a room of 3 people have the same birthday is (365/365 * 364/365 * 363/365) =~ 0.9918
More generally, if there are n people in a room, then the probability that nobody has the same birthday is (365/365 * 364/365 * ... * (365-n+2)/365 * (365-n+1)/365)
We can plug in values for n. For n=22, we get that the probability that nobody has the same birthday is 0.524, and thus the probabilty that at least two people have the same birthday is (1.0 - 0.524) = 0.476 = 47.6%.
Then for n=23, we get that the probability that nobody has the same birthday is 0.493, and thus the probabilty that at least two people have the same birthday is 1.0 - 0.493) = 0.507 = 50.7%. Thus, once we get to 23 people we have reached the 50% threshold.

If you're 8 feet away from a door and with each move you advance half the distance to the door. How many moves will it take to reach the door?

You will never reach the door! If you only move half the distance, then you will always have half the distance remaining no matter, how small is the number.

A deliveryman comes to a house to drop off a package. He asks the woman who lives there how many children she has.
"Three," she says. "And I bet you can't guess their ages."
"Ok, give me a hint," the deliveryman says.
"Well, if you multiply their ages together, you get 36," she says. "And if you add their ages together, the sum is equal to our house number."
The deliveryman looks at the house number nailed to the front of her house. "I need another hint," he says.
The woman thinks for a moment. "My youngest son will have a lot to learn from his older brothers," she says.
The deliveryman's eyes light up and he tells her the ages of her three children. What are their ages?

Their ages are 1, 6, and 6. We can figure this out as follows:
Given that their ages multiply out to 36, the possible ages for the children are:
1, 1, 36 (sum = 38)
1, 2, 18 (sum = 21)
1, 3, 12 (sum = 16)
1, 4, 9 (sum = 14)
1, 6, 6 (sum = 13)
2, 2, 9 (sum = 13)
2, 3, 6 (sum = 11)
3, 3, 4 (sum = 10)
When the woman tells the deliveryman that the children's ages add up to her street number, he still doesn't know their ages. The only way this could happen is that there is more than one possible way for the children's ages to add up to the number on the house (or else he would have known their ages when he looked at the house number). Looking back at the possible values for the children's ages, you can see that there is only one situation in which there are multiple possible values for the children's ages that add up to the same sum, and that is if their ages are either 1, 6, and 6 (sums up to 13), or 2, 2, and 9 (also sums up to 13). So these are now the only possible values for their ages.
When the woman then tells him that her youngest son has two older brothers (who we can tell are clearly a number of years older), the only possible situation is that their ages are 1, 6, and 6.

Mick and John were in a 100 meter race. When Mick crossed the finish line, John was only at the 90 meter mark. Mick suggested they run another race. This time, Mick would start ten meters behind the starting line. All other things being equal, will John win, lose, or will it be a tie in the second race?

John will lose again. In the second race, Mick started ten meters back. By the time John reaches the 90 meter mark, Mick will have caught up him. Therefore, the final ten meters will belong to the faster of the two. Since Mick is faster than John, he will win the final 10 meters and of course the race.

Two planes take off at the same exact moment. They are flying across the Atlantic. One leaves New York and is flying to Paris at 500 miles per hour. The other leaves Paris and is flying to New York at only 450 miles per hour. Which one will be closer to Paris when they meet?

They will both the same distance from Paris when they meet!

As I was going to the mall I met a man with seven wives. Each wive held two bags, each bag held a mother cat, each mother cat had six babies,
How many people were going to the mall?

Two words are anagrams if and only if they contain the exact same letters with the exact same frequency (for example, "name" and "mean" are anagrams, but "red" and "deer" are not).
Given two strings S1 and S2, which each only contain the lowercase letters a through z, write a program to determine if S1 and S2 are anagrams. The program must have a running time of O(n + m), where n and m are the lengths of S1 and S2, respectively, and it must have O(1) (constant) space usage.

First create an array A of length 26, representing the counts of each letter of the alphabet, with each value initialized to 0. Iterate through each character in S1 and add 1 to the corresponding entry in A. Once this iteration is complete, A will contain the counts for the letters in S1. Then, iterate through each character in S2, and subtract 1 from each corresponding entry in A. Now, if the each entry in A is 0, then S1 and S2 are anagrams; otherwise, S1 and S2 aren't anagrams.
Here is pseudocode for the procedure that was described:
def areAnagrams(S1, S2)
A = new Array(26)
A.initializeValues(0)
for each character in S1
arrayIndex = mapCharacterToNumber(character) //maps "a" to 0, "b" to 1, "c" to 2, etc...
A[arrayIndex] += 1
end
for each character in S2
arrayIndex = mapCharacterToNumber(character)
A[arrayIndex] -= 1
end
for (i = 0; i < 26; i++)
if A[i] != 0
return false
end
end
return true
end