Wednesday, January 7, 2009

Microsoft interview questions

1.why are you interested in join SDE?

2. given one continuous array, provide the factorial value for each element of the array.

Answers:
typedef struct element
{
  int x;
  struct element *next;
}element;

void insert_link_list(element ** head, int value)
{
  
  element * tmp = (element*)malloc(sizeof(element));

 tmp->x = value;
 tmp->next = *head;
*head = tmp;
}

int factorial(int value)
{
  int result = 0; 
   while(value)
  {
     result+= value*(value-1);
    value--;
 }
return result;
}

void print_link_list(element **head)
{
   element **node;
   for(node=head; (*node)!=NULL; node = &(*node)->next)
    printf("%d\n", (*node)->x);
}

void main()
{
   element *head=NULL;
   int result;  
    for(int index=1;index<100;index++)
     {
      result = factorial(index);
     insert_link_list(&head,result);
   }
   print_link_list(&head);
}

  
3. given one number, such as 100, please find  all prime numbers starting from 1 to 100.

typedef struct element
{
  int x;
  struct element *next;
}element;

int is_prime_number(int n)
{
long c;
if (n <= 2) 
   return 1;
for (c = 2; c <=n/2; c++)
{
    if ((n % c) == 0) 
       return 0;
}
return 1;
}
void insert_link_list(element **head,int index)
{
element *new_element;
new_element = (element*)malloc(sizeof(element));
new_element->x = index;
//new_element->next = NULL;
new_element->next = *head;
*head = new_element;
}

void insert_middle_link(element **head,int index)
{
  element **node;
  element *new_elem;
  for(node=head;(*node)!=NULL;node = &(*node)->next)
  {
 if( (*node)->x == index)
 {
         new_elem = (element*)malloc(sizeof(element));
new_elem->x = index+1;
new_elem->next = (*node)->next;
(*node)->next = new_elem;
 }
  }
}


void delete_middle_list(element **head,int index)
{
   element **node;
  for(node=head;(*node)!=NULL;node = &(*node)->next)
  {
 if( (*node)->x == index)
 {
 (*node)= (*node)->next;
 }
  }
}

int _tmain(int argc, _TCHAR* argv[])
{
int index;
element *prime_list=NULL;
    element *new_element;

//element *new_element;
for(index=1;index<1000;index++)
{
    if(is_prime_number(index))
    {
      insert_link_list(&prime_list,index);
      printf("%d is prime number\n",index);
      } 
 }

insert_middle_link(&prime_list,3);
delete_middle_list(&prime_list,3);

while(prime_list!=NULL)
{
  printf("%d\n",(prime_list)->x);
  prime_list=(prime_list)->next;
}
return 0;
}

No comments: