Logic riddles

logicmathclean

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.
72.19 %
135 votes
logictricky

An egg has to fall 100 feet, but it can't break upon landing (or in the air). Its fall can't be slowed down, nor can its landing be cushioned in any way. How is it done?
Drop it from more than 100 feet high. It won't break for the first 100 feet.
72.18 %
60 votes
logicsimpleclean

At a local bar, three friends, Mr. Green, Mr. Red and Mr. Blue, were having a drink. One man was wearing a red suit; one a green suit; and the other a blue suit. "Have you noticed," said the man in the blue suit, "that although our suits have colors corresponding to our names, not one of us is wearing a suit that matches our own names?" Mr. Red looked at the other two and said, "You're absolutely correct." What color suit is each man wearing?
Since none of the men are wearing the color of suit that corresponds to their names, and Mr. Red was replying to the man in the blue suit, it had to be Mr. Green to whom he replied. We then know that Mr. Green is wearing a blue suit. Therefore, Mr. Red is wearing a green suit and Mr. Blue is wearing a red suit.
72.14 %
77 votes
logicdetectiveclever

Handel has been killed and Beethoven is on the case. He has interviewed the four suspects and their statements are shown below. Each suspect has said two sentences. One sentence of each suspect is a lie and one sentence is the truth. Help Beethoven figure out who the killer is. Joplin: I did not kill Handel. Either Grieg is the killer or none of us is. Grieg: I did not kill Handel. Gershwin is the killer. Strauss: I did not kill Handel. Grieg is lying when he says Gershwin is the killer. Gershwin: I did not kill Handel. If Joplin did not kill him, then Grieg did. Who is the killer?
Strauss is the one who killed Handel. You need to take turns assuming someone is the killer; that means everyone's second sentence is a lie. If Joplin was the killer, Grieg's lie mixed with Strauss' counteracts the other. If Grieg was the killer, Gershwin would need to be a killer too. If Gershwin was the killer, Gershwin would need to be a killer too. If Gershwin was the killer, Grieg and Strauss counter each other again, but with Strauss, everything would fit in.
72.01 %
178 votes
cleanfunnylogic

A kind hearted person Mr. Rawat buy packed food at 3$/packet from United states and sells them at 1$/packet at Africa. After some time he becomes a millionaire. How come the guy become millionaire?
He started out as a billionaire, but lost so much money in his good works (by giving to poor people) that he became a millionaire.
71.93 %
93 votes
cleansimplelogic

A blind man walks into a hardware store to buy a hammer. There are hammers hanging behind the front desk, but obviously the blind man isn't able to see them. And yet a few minutes later, he happily walks out of the store, having just purchased a new hammer. How did he do it?
He walks up the the front desk where the clerk is working and says "I'd like to buy a hammer."
71.88 %
55 votes
logicmath

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
71.88 %
55 votes