原题:http://blog.csdn.net/v_july_v/article/details/11921021
1. 华为
#include <stdio.h> #include <stdlib.h> #include <string.h> /* * HuaWei: A string compressed example * */ void stringZip(const char *pInputStr, char *pOutputStr) { int len = strlen(pInputStr); char *tmp = (char *)malloc(sizeof(len * sizeof(char))); int start = 0; int end = start + 1; int cnt = 0; int i = 0; while(pInputStr[start]) { if(pInputStr[start] == pInputStr[end]) { cnt++; end++; } else { if(cnt == 0) tmp[i++] = pInputStr[start]; else if(cnt > 0) { tmp[i++] = cnt + 1 + '0'; tmp[i++] = pInputStr[start]; cnt = 0; } start = end; end = start + 1; } } tmp[i] = ' '; strncpy(pOutputStr, tmp, strlen(tmp)); free(tmp); } void main() { char str[1024]; char compress_str[1024]; printf("Input a string:"); gets(str); stringZip(str, compress_str); printf("The compressed string is:"); puts(compress_str); }
2. 迅雷
#include <stdio.h> #include <stdlib.h> /* * XunLei: difference of linked list * */ typedef struct node { int elem; struct node *next; }node; void create(node **head, int n) { int elem; int i; node *p; node *r; for(i = 0;i < n;i++) { if(scanf("%d", &elem) != 1) { perror("input error! "); exit(1); } p = (node *)malloc(sizeof(node *)); if(!p) { perror("memory error! "); exit(2); } p->elem = elem; p->next = 0; if(!*head) *head = p; else { r->next = p; } r = p; } } void show(node *head) { node *p = head; while(p) { printf("%d ", p->elem); p = p->next; } } void difference(node **LA, node *LB) { node *p, *q, *pre; node *head; p = *LA; pre = *LA; head = p; while(p) { q = LB; while(q) { if(p->elem == q->elem) break; q = q->next; } if(q) { if(pre == p) { p = p->next; pre->next = 0; free(pre); pre = p; head = p; } else { pre->next = p->next; p->next = 0; free(p); p = pre->next; } } else { pre = p; p = p->next; } } *LA = head; } void main() { node *head1 = NULL, *head2 = NULL; create(&head1, 5); printf("---------- "); create(&head2, 3); difference(&head1, head2); printf("---------- "); show(head1); }