2014美團網筆試題目

才智咖 人氣:1.07W

1、一堆硬幣,一個機器人,如果是反的就翻正,如果是正的就拋擲一次,無窮多次後,求正反的比例

2014美團網筆試題目

解答:是不是題目不完整啊,我算的.是3:1

2、一個汽車公司的產品,甲廠佔40%,乙廠佔60%,甲的次品率是1%,乙的次品率是2%,現在抽出一件汽車時次品,問是甲生產的可能性

解答:典型的貝葉斯公式,p(甲|廢品) = p(甲 && 廢品) / p(廢品) = (0.4 × 0.01) /(0.4 × 0.01 + 0.6 × 0.02) = 0.25

3、k連結串列翻轉。給出一個連結串列和一個數k,比如連結串列1→2→3→4→5→6,k=2,則翻轉後2→1→4→3→6→5,若k=3,翻轉後3→2→1→6→5→4,若k=4,翻轉後4→3→2→1→5→6,用程式實現

非遞迴可執行程式碼

#include

#include

#include

typedef struct node {

struct node *next;

int data;

} node;

void createList(node **head, int data)

{

node *pre, *cur, *new;

pre = NULL;

cur = *head;

while (cur != NULL) {

pre = cur;

cur = cur->next;

}

new = (node *)malloc(sizeof(node));

new->data = data;

new->next = cur;

if (pre == NULL)

*head = new;

else

pre->next = new;

}

void printLink(node *head)

{

while (head->next != NULL) {

printf("%d ", head->data);

head = head->next;

}

printf("%dn", head->data);

}

int linkLen(node *head)

{

int len = 0;

while (head != NULL) {

len ++;

head = head->next;

}

return len;

}

node* reverseK(node *head, int k)

{

int i, len, time, now;

len = linkLen(head);

if (len < k) {

return head;

} else {

time = len / k;

}

node *newhead, *prev, *next, *old, *tail;

for (now = 0, tail = NULL; now < time; now ++) {

old = head;

for (i = 0, prev = NULL; i < k; i ++) {

next = head->next;

head->next = prev;

prev = head;

head = next;

}

if (now == 0) {

newhead = prev;

}

old->next = head;

if (tail != NULL) {

tail->next = prev;

}

tail = old;

}

if (head != NULL) {

tail->next = head;

}

return newhead;

}

int main(void)

{

int i, n, k, data;

node *head, *newhead;

while (scanf("%d %d", &n, &k) != EOF) {

for (i = 0, head = NULL; i < n; i ++) {

scanf("%d", &data);

createList(&head, data);

}

printLink(head);

newhead = reverseK(head, k);

printLink(newhead);

}

return 0;

}