Exercise 3.10 is not complete.
This commit is contained in:
parent
75f158d6be
commit
4e0691c286
|
@ -1,16 +1,12 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
void printTime(clock_t end, clock_t start) {
|
void printTime(clock_t end, clock_t start) {
|
||||||
printf("Took %lf to calculate.\n", ((double)(end - start)) / CLOCKS_PER_SEC);
|
printf("Took %lf to calculate.\n", ((double)(end - start)) / CLOCKS_PER_SEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void calculate(long long N) {
|
void calculate(long long N) {
|
||||||
clock_t end, start;
|
clock_t end, start;
|
||||||
|
|
||||||
start = clock();
|
start = clock();
|
||||||
|
|
||||||
for (int i = 1, root = (int)floor(sqrt((double)N)); i < root; i++) {
|
for (int i = 1, root = (int)floor(sqrt((double)N)); i < root; i++) {
|
||||||
if (N % i == 0) {
|
if (N % i == 0) {
|
||||||
end = clock();
|
end = clock();
|
||||||
|
@ -19,19 +15,16 @@ void calculate(long long N) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
end = clock();
|
end = clock();
|
||||||
printTime(end, start);
|
printTime(end, start);
|
||||||
printf("%lld is prime\n", N);
|
printf("%lld is prime\n", N);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
long long test[] = {1048575, 1099511627775};
|
long long test[] = {1048575, 1099511627775};
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
calculate(test[i]);
|
calculate(test[i]);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
88
semester3/exercises/exercise3.10.c
Normal file
88
semester3/exercises/exercise3.10.c
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
typedef struct ListNode {
|
||||||
|
int val;
|
||||||
|
struct ListNode *next;
|
||||||
|
} ListNode;
|
||||||
|
|
||||||
|
ListNode *appendNode(ListNode *node, int val) {
|
||||||
|
ListNode *new = malloc(sizeof(ListNode));
|
||||||
|
node->next = new;
|
||||||
|
|
||||||
|
new->next = NULL;
|
||||||
|
new->val = val;
|
||||||
|
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
|
void freeNode(ListNode *head) {
|
||||||
|
if (head != NULL) {
|
||||||
|
ListNode * ptr = head->next;
|
||||||
|
free(head);
|
||||||
|
freeNode(ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void deleteNode(ListNode *node) {
|
||||||
|
// deletes node after this one.
|
||||||
|
ListNode* tmp = node->next;
|
||||||
|
node->next = node->next->next;
|
||||||
|
|
||||||
|
// printf("Deleted: %d\n", tmp->val);
|
||||||
|
|
||||||
|
tmp->next = NULL;
|
||||||
|
free(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printNode(ListNode *head) {
|
||||||
|
ListNode *ptr = head;
|
||||||
|
|
||||||
|
while (ptr != NULL) {
|
||||||
|
printf("%d->", ptr->val);
|
||||||
|
ptr = ptr->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("NULL\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
// N people, M passes
|
||||||
|
int N, M;
|
||||||
|
scanf("%d%d", &M, &N);
|
||||||
|
|
||||||
|
// construct ring
|
||||||
|
ListNode *head = malloc(sizeof(ListNode));
|
||||||
|
ListNode *ptr = head;
|
||||||
|
|
||||||
|
for (int i = 1; i <= N; i++) {
|
||||||
|
ptr = appendNode(ptr, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
printNode(head->next);
|
||||||
|
// enclose the ring
|
||||||
|
ptr->next = head->next;
|
||||||
|
|
||||||
|
// start simulation
|
||||||
|
ListNode** cur = &head;
|
||||||
|
ListNode** tmp;
|
||||||
|
int pass = 0;
|
||||||
|
|
||||||
|
while ((*cur) && (*cur)->next && (*cur)->next->next) {
|
||||||
|
// printf("Potato: %d\n", (*cur)->next->val);
|
||||||
|
if (pass == M) {
|
||||||
|
// kick this player, and continue.
|
||||||
|
tmp = cur;
|
||||||
|
deleteNode(*cur);
|
||||||
|
pass = 0;
|
||||||
|
} else {
|
||||||
|
cur = &(*cur)->next;
|
||||||
|
pass++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("Remaining: %d\n", (*cur)->next->val);
|
||||||
|
|
||||||
|
free(head);
|
||||||
|
free(cur);
|
||||||
|
return 0;
|
||||||
|
}
|
99
semester3/exercises/exercise3.6.c
Normal file
99
semester3/exercises/exercise3.6.c
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
typedef struct ListNode {
|
||||||
|
int val;
|
||||||
|
struct ListNode *next;
|
||||||
|
} ListNode;
|
||||||
|
|
||||||
|
ListNode *appendNode(ListNode *node, int val) {
|
||||||
|
ListNode *new = malloc(sizeof(ListNode));
|
||||||
|
node->next = new;
|
||||||
|
|
||||||
|
new->next = NULL;
|
||||||
|
new->val = val;
|
||||||
|
|
||||||
|
return new;
|
||||||
|
}
|
||||||
|
|
||||||
|
void freeNode(ListNode *head) {
|
||||||
|
ListNode *ptr = head;
|
||||||
|
do {
|
||||||
|
head = ptr;
|
||||||
|
ptr = ptr->next;
|
||||||
|
free(head);
|
||||||
|
} while (ptr != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printNode(ListNode *head) {
|
||||||
|
ListNode *ptr = head;
|
||||||
|
|
||||||
|
while (ptr != NULL) {
|
||||||
|
printf("%d->", ptr->val);
|
||||||
|
ptr = ptr->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("NULL\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
ListNode *addList(ListNode *l, ListNode *r) {
|
||||||
|
ListNode *head = malloc(sizeof(ListNode));
|
||||||
|
head->val = l->val + r->val;
|
||||||
|
|
||||||
|
ListNode *ptr = head;
|
||||||
|
ListNode *ptrL = l->next;
|
||||||
|
ListNode *ptrR = r->next;
|
||||||
|
while (ptrL && ptrR) {
|
||||||
|
ptr = appendNode(ptr, ptrL->val + ptrR->val);
|
||||||
|
ptrL = ptrL->next;
|
||||||
|
ptrR = ptrR->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (ptrL) {
|
||||||
|
ptr = appendNode(ptr, ptrL->val);
|
||||||
|
ptrL = ptrL->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (ptrR) {
|
||||||
|
ptr = appendNode(ptr, ptrR->val);
|
||||||
|
ptrR = ptrR->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
ListNode *l = malloc(sizeof(ListNode));
|
||||||
|
ListNode *r = malloc(sizeof(ListNode));
|
||||||
|
|
||||||
|
ListNode *ptrL = l;
|
||||||
|
ListNode *ptrR = r;
|
||||||
|
|
||||||
|
// input
|
||||||
|
int lLen, rLen;
|
||||||
|
scanf("%d", &lLen);
|
||||||
|
scanf("%d", &rLen);
|
||||||
|
int temp;
|
||||||
|
|
||||||
|
for (int i = 0; i < lLen; i++) {
|
||||||
|
scanf("%d", &temp);
|
||||||
|
ptrL = appendNode(ptrL, temp);
|
||||||
|
}
|
||||||
|
printNode(l->next);
|
||||||
|
|
||||||
|
for (int i = 0; i < rLen; i++) {
|
||||||
|
scanf("%d", &temp);
|
||||||
|
ptrR = appendNode(ptrR, temp);
|
||||||
|
}
|
||||||
|
printNode(r->next);
|
||||||
|
|
||||||
|
// add
|
||||||
|
ListNode *ans = addList(l->next, r->next);
|
||||||
|
printNode(ans);
|
||||||
|
|
||||||
|
freeNode(l);
|
||||||
|
freeNode(r);
|
||||||
|
freeNode(ans);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue