Saturday 16 July 2016

Two circles have their centers 21 cm apart. The radii of the circles are 10 cm and 17 cm. Find the length (in cm) of the common chord of the two circles.

 if two circles having radii a and b with the distance between them as c,
Length of common chord= 2* Sqrt [ a^2 - ((a^2+c^2-b^2)/2c)^2]

Ans. 84

If the HCF of two number is 23 and the LCM is 4186, one of the two numbers is one of the following: 

a) 276 b) 300 c) 322 d) 345. Which one is it?


Ans. c) 322 

 Both number should be divisible by its HCF and LCM should be divisible by  both the numbers whose  HCF and LCM are to determine. 
 a) 276%23=0
      4186%276=46

b)300%23=1
  4186%300=286

c)322%23=0
 4186%322=0

d)345%23=0
 4186%345=46

How do I find two numbers when I know that their LCM is 36 and HCF is 15?


If the HCF of the two numbers say x and y is 15; the numbers can be represented as following:
x = 15a and y = 15b where a and b are positive integers
It is given that LCM of x and y is 36
Now LCM (x,y) * HCF (x,y) = x * y
Hence, 36 * 15 = 15a * 15b
540 = 225*a*b
or 2.4 = a*b
The product of two integers cannot be 2.4 hence such two numbers do not exist.

The sum of two numbers is 52 and their LCM is 168. What are the numbers?


As LCM of two numbers is 168 that two numbers must be factors of 168
now think about what are all factors of 168 that are less than 52(because sum of those two is 52)
factors=(2,3,4,6,8,7,8,12,14,24,28,42)
from above factors u have to select two numbers such that sum of two is 52
only possibility is 24+28

What is the difference between two numbers if their LCM is 630 and HCF is 9 and the sum of the two numbers is 153?


Given GCD of two numbers is 9 and LCM is 630.
Let a, b be two numbers
As we know,
LCM × HCF = The product of given numbers
a×b=9×630
Given a+b=153
By using formula
(a-b)^2=(a+b)^2-4×a×b
(a-b)^2=(153^2)-(4×9×630)
(a-b)^2=729
x-y=27
Ans.27

Another Solution:

Let's assume the numbers are 9*a and 9*b (as the hcf is 9).
As we know,
LCM × HCF = The product of given numbers
So, (9*a)*(9*b) = 630*9
So, a*b = 70
Again 9*(a + b)= 153

By solving those two equations, we get either a=10, b=7 or a=7 , b=10
So either way, the two numbers are 90 and 63.
So, (ab)=27 or the difference between the two numbers is 27.
Ans.27

The LCM of 1, 2, 3, ... 60 is N. What is the LCM of 1, 2, 3, ... 65?


Answer: 61*2*n

We are given LCM (1, 2, 3 ... 60) = n
Now, we need to find out LCM (1, 2, 3... 65)

= LCM (n, 61, 62, 63, 64, 65) 
{The first 60 numbers can be replaced with 'n' as we already know their LCM}

= LCM (n, 61,64) 
{62, 63, and 65 can be broken down into prime factors which are in turn factors of n} 

= 61*2*n  
{61 is a prime number. 64 is 2^6. 2^5 occurs in 32. An extra 2 is required to accommodate it}

122n

Explanation:

Lcm of first 60 numbers is n, so we need to consider 5 more numbers 61...65. Lets use prime factorization and try to figure out how inclusion of each of these numbers will affect lcm.
61 - It is a prime number and so it has not been included in n till now. So Lcm of 1...61 become 61*n.
62 - Prime factorization of 62 is 2*31 and both of these numbers are already included in n. So lcm doesn't change by inclusion of 62 and it remains 61*n.
63 - Prime factorization of 63 is 3*3*7 and these numbers are already there in n. In fact 3 is there three times (for 27) and 7 is there two times (for 49). So inclusion of 63 also doesn't change lcm and lcm remain 61*n for numbers 1....63.
64 - Factorization of 64 is 2^6. Now 2^5 is already there in n for 32. So we need to include only one more 2, and lcm of numbers 1..upto 64 becomes 61*2*n.
65 - 65 factorizes as 5*13. Both of these numbers are there in n already and by inclusion of 65, lcm doesn't change. So it remains 61*2*n.

Thursday 14 July 2016

How-many-pairs-of-2-numbers-are-there-whose-LCM-is-N

If N= a^m*b^n *c^o then ordered solution such that LCM = N is (2m+1)*(2n+1)*(2o+1)
Unordered will be (2m+1)*(2n+1)*(2o+1) /2 +0.5

A 4 digit no. is formed using the digits 0,2,4,6,8 without repeating any 1 of them. What is the sum of all such possible no.s?

1)519960 2)402096 3)133320 4)4321302

If you fix 8 as the last digit, you see that there are 4*3*2 ways to complete the number. Thus, 8 appears 24 times as the last digit. By the same logic, if we enumerate all possible numbers using these 5 digits, each number appears 24 times in each of the 4 positions. That is, the digit 8 contributes (24*8+240*8+2400*8+24000*8). In total, we have
(0+2+4+6+8)(24+240+2400+24000)=533280
as our total sum.
In case 4-digit numbers cannot start with 0, then we have over-counted. Now we have to subtract the amount by which we over-counted, which is found by answering: "What is the sum of all 3-digit numbers formed by using digits 2,4,6, and 8?" Now if 8 appears as the last digit, then there are 6 ways to complete the number, so 8 contributes (6*8+60*8+600*8). In total, we have
(2+4+6+8)(6+60+600)=13320.
Subtracting this from the above gives us 519960.

Which is the Smallest number that has 4 prime factors & 48 total factors?

Take first 4 prime numbers as
2^a*3^b*5^c*7^d
Give maximum powers to 2 and 3 to get the minimum number 

(a+1)(b+1)(c+1)(d+1)=48
4*3*2*2=48
a=3 b=2 c=1 d=1

8*9*5*7=2520 Ans.

A ball is dropped from a height of 96 feet and it rebounds 2/3 of the height it falls. If it continues to fall and rebound, find the total distance that the ball can travel before coming to rest? 

a.240 ft b 360 ft c.480 ft d.none of these

Here is a trick if ball rebounds for 2/3 or for any other fraction (p/q) like 3/4, 1/2 or 5/2 
then use this (p+q)*height.
so we get, according to this question,

(2+3)*96= 480 Feet.

Another Trick:
96(1+r)/(1-r)=96(5/3)/(1/3)=480

Monday 4 July 2016

Power of 2

How do you find out if an unsigned integer is a power of 2?

The trick here is to know that an unsigned integer which is a power of 2 has only one of its bits as 1. So a simple solution would be to loop through the bits and count the number of 1s.
There is another solution which uses bit manipulation.
isPower = (x !=0 && !(x & (x-1)))
x & (x-1) will always give you a 0 if x is a power of 2. !(x & (x-1)) should give us what we want but there is one corner case. If x is 0, then the second term alone would return true when the answer should be false. We need the check to make sure x is not 0.

Reverse a String

First Solution

void reverseString(char* str) { int len, loop;
char temp; len = strlen(str); for(loop = 0; loop < (len / 2); loop++) { temp = str[loop];
str[loop] = str[len - loop - 1];
str[len - loop - 1] = temp; } }

Second Solution

The second solution is slightly better than the first as it does not need the char space. It uses bit manipulation (XOR in this case) to swap the chars in place.

void reverseStringBetter(char* str) { int loop1 = 0, loop2; loop2 = strlen(str) - 1; for (loop1 = 0; loop1 < loop2; loop1++, loop2--) { str[loop1] ^= str[loop2] ; str[loop2] ^= str[loop1] ; str[loop1] ^= str[loop2] ; } }

Number of Ones

Write a function that determines the number of bits set to 1 in the binary representation of an integer.
Going by the brute force approach, it would be easy to come up with the following solution. If the least significant bit of a number is 1, it will return a result of 1 when we AND it with 1. Using this logic, we can shift bits in the number to the right and keep testing if the least significant bit is 1. When there are no 1’s left in the number, it will become zero. 

int numOnesInInteger(int num) { int numOnes = 0; while(num != 0) { if((num & 1) == 1) { numOnes++; } num = num >> 1; } return numOnes; }

Time Complexity: O(n) ==> Where n in the number of bits in the integer.

Improved Solution:

Let’s think, what happens to a number when it we AND it with (number – 1). Let’s take 7 (0111) as an example.

7 & 6 = 0111 & 0110 = 0110 = 6
6 & 5 = 0110 & 0101 = 0100 = 4
4 & 3 = 0100 & 0011 = 0000 = 0
Do you see a pattern yet? Essentially, when you AND a number with (number – 1), the last 1 bit in the number gets set to zero. So if we continue to set every 1 bit in the number to zero, the number will eventually become zero. If we use this logic to count the number of 1s, we have an algorithm that runs in O(m) where m is the number of bits set to 1 in the number. Here’s some code.
int numOnesInInteger(int num) { int numOnes = 0; while(num != 0){ num = num & (num – 1); numOnes++; } return numOnes; }
int main()
{
     int num, count = 0;
     printf(“Enter the number: “);
     scanf(“%d”,&num);
     count = number_of_ones(num);
     printf(“\nNumber of one’s are %d\n”, count);
     return 0;
}

Sunday 3 July 2016

Meaning of “referencing” and “dereferencing”


Referencing means taking the address of an existing variable (using &) to set a pointer variable. In order to be valid, a pointer has to be set to the address of a variable of the same type as the pointer, without the asterisk:
int  c1;
int* p1;
c1 = 5;
p1 = &c1;
//p1 references c1
Dereferencing a pointer means using the *operator (asterisk character) to access the value stored at a pointer.
NOTE: The value stored at the address of the pointer must be a value of the same type as the type of variable the pointer "points" to
.
e.g. *p = *p +1;
Note: & is the reference operator and can be read as address of.* is the dereference operator and can be read as value pointed by.


Search an element in a sorted and rotated array

#include <stdio.h>

int searchElementInRotatedArray(int arr[], int start, int end, int key) {
    while(start < end) {
        int mid = (start + end) / 2;
        if(arr[mid] == key) {
            return 1;
        }
        if(arr[start] <= arr[mid]) {
            if((key >= arr[start]) && (key <= arr[mid])) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
        } else {
            if((key >= arr[mid]) && (key <= arr[end])) {
                start = mid + 1;
            } else {
                end = mid - 1;
            }
        }
    }
    return 0;
}

int main() {
    int len, num;
    printf("Enter Length of Array: ");
    scanf("%d", &len);
    int arr[len];
    printf("Enter Elements of Array: ");
    for(int loop = 0; loop < len; loop++) {
        scanf("%d ", &arr[loop]);
    }
    printf("Enter Element to Search: ");
    scanf("%d", &num);
    (searchElementInRotatedArray(arr, 0, len, num))?printf("Key Found\n"):printf("Key Not Found\n");
    return 0;
}

Solution Using Temporary Array
Input arr[] = [10, 12, 23, 40, 53, 36, 78], d = 2, n =7
1) Store d elements in a temp array
   temp[] = [10, 12]
2) Shift rest of the arr[]
   arr[] = [23, 40, 53, 36, 78, 36, 78]
3) Store back the d elements
   arr[] = [23, 40, 53, 36, 78, 10, 12]
Time complexity O(n)
Auxiliary Space: O(d)

Implementation:

#include <stdio.h>

int main() {
    long num, rot;
    scanf("%ld %ld", &num, &rot);
    unsigned long arr[num];
    unsigned temp[rot];
    for(long loop = 0; loop < num; loop++) {
        scanf("%lu", &arr[loop]);
    }
    for(long loop = 0; loop < rot; loop++) {
        temp[loop] = arr[loop];
    }
    for(long loop = rot; loop < num; loop++) {
        arr[loop - rot] = arr[loop];
    }
    long index = 0;
    for(long loop = (num - rot); loop < num; loop++) {
        arr[loop] = temp[index++];
    }
    for(long loop = 0; loop < num; loop++) {
        printf("%lu ", arr[loop]);
    }
    return 0;
}

Saturday 2 July 2016

Compare two linked lists

int CompareLists(Node *headA, Node *headB)
{
    while((headA != NULL) && (headB != NULL)) {
        if(headA->data != headB->data) {
            break;
        }
        headA = headA->next;
        headB = headB->next;
    }
    if((headA == NULL) && (headB == NULL)) {
        return 1;
    } else {
        return 0;
    }
}

Reverse a Linked-List

void ReversePrint(Node *head)
{
    Node *prev = NULL, *curr = head, *next;
    if(head != NULL) {
        while(curr != NULL) {
            next = curr->next;
            curr->next = prev;
            prev = curr;
            curr = next;
        }
        head = prev;
        while(prev != NULL) {
            printf("%d\n", prev->data);
            prev = prev->next;
        }  
    }
}