Add pset0
This commit is contained in:
parent
7adbfbf396
commit
d2f2268cf2
71
semester3/pset0/7-1-Balancing-Symbols.cpp
Normal file
71
semester3/pset0/7-1-Balancing-Symbols.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <pthread.h>
|
||||
#include <stack>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
char getParen(const char &ch) {
|
||||
if (ch == ']') {
|
||||
return '[';
|
||||
} else if (ch == ')') {
|
||||
return '(';
|
||||
} else {
|
||||
return '{';
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
std::string input;
|
||||
std::cin >> input;
|
||||
std::stack<char> st;
|
||||
bool ans[4] = {false, false, false, false};
|
||||
|
||||
for (char ch : input) {
|
||||
// scan for errors
|
||||
// () [] {}
|
||||
if (ch == '(' || ch == '[' || ch == '{') {
|
||||
st.push(ch);
|
||||
} else if (ch == ')' || ch == ']' || ch == '}') {
|
||||
// check
|
||||
if (!st.empty() && st.top() == getParen(ch)) {
|
||||
// pop, nothing wrong
|
||||
st.pop();
|
||||
} else {
|
||||
if (ch == ')') {
|
||||
ans[1] = true;
|
||||
} else if (ch == ']') {
|
||||
ans[2] = true;
|
||||
} else {
|
||||
ans[3] = true;
|
||||
}
|
||||
ans[0] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (!st.empty()) {
|
||||
if (st.top() == '(') {
|
||||
ans[1] = true;
|
||||
} else if (st.top() == '[') {
|
||||
ans[2] = true;
|
||||
} else {
|
||||
ans[3] = true;
|
||||
}
|
||||
|
||||
ans[0] = true;
|
||||
st.pop();
|
||||
}
|
||||
|
||||
if (ans[0] == false) {
|
||||
printf("0");
|
||||
} else {
|
||||
for (int i = 1; i < 4; i++) {
|
||||
if (ans[i] == true) {
|
||||
printf("%d,", i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
92
semester3/pset0/7-2-Infix-to-Postfix-Conversion.cpp
Normal file
92
semester3/pset0/7-2-Infix-to-Postfix-Conversion.cpp
Normal file
|
@ -0,0 +1,92 @@
|
|||
// Convert the infix expression to postfix expression.
|
||||
#include <cctype>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
int prec(char ch) {
|
||||
if (ch == '+' || ch == '-') {
|
||||
return 0;
|
||||
} else if (ch == '*' || ch == '/') {
|
||||
return 1;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void printEval(string &postfix) {
|
||||
stack<double> st;
|
||||
double l, r;
|
||||
double ans;
|
||||
for (char ch : postfix) {
|
||||
if (isdigit(ch)) {
|
||||
st.push(ch - '0');
|
||||
} else {
|
||||
r = st.top();
|
||||
st.pop();
|
||||
l = st.top();
|
||||
st.pop();
|
||||
if (ch == '+') {
|
||||
ans = l + r;
|
||||
} else if (ch == '-') {
|
||||
ans = l - r;
|
||||
} else if (ch == '*') {
|
||||
ans = l * r;
|
||||
} else if (ch == '/') {
|
||||
ans = l / r;
|
||||
}
|
||||
st.push(ans);
|
||||
}
|
||||
}
|
||||
printf("%.2lf\n", st.top());
|
||||
}
|
||||
|
||||
void printFix(string &postfix) {
|
||||
for (char ch : postfix) {
|
||||
printf("%c ", ch);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
string input;
|
||||
cin >> input;
|
||||
|
||||
stack<char> st;
|
||||
string postfix;
|
||||
|
||||
for (char ch : input) {
|
||||
if (isdigit(ch)) {
|
||||
postfix.push_back(ch);
|
||||
} else {
|
||||
// if is not a digit
|
||||
if (ch == '(') {
|
||||
st.push(ch);
|
||||
} else if (ch == ')') {
|
||||
while (st.top() != '(') {
|
||||
postfix.push_back(st.top());
|
||||
st.pop();
|
||||
}
|
||||
st.pop();
|
||||
} else {
|
||||
// a operand
|
||||
while (!st.empty() && prec(ch) <= prec(st.top())) {
|
||||
postfix.push_back(st.top());
|
||||
st.pop();
|
||||
}
|
||||
st.push(ch);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (!st.empty()) {
|
||||
postfix.push_back(st.top());
|
||||
st.pop();
|
||||
}
|
||||
|
||||
printEval(postfix);
|
||||
printFix(postfix);
|
||||
|
||||
return 0;
|
||||
}
|
63
semester3/pset0/7-3-central-list.c
Normal file
63
semester3/pset0/7-3-central-list.c
Normal file
|
@ -0,0 +1,63 @@
|
|||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct stack {
|
||||
int val;
|
||||
struct stack *next;
|
||||
} stack;
|
||||
|
||||
stack *push(stack *st, int val) {
|
||||
stack *new = malloc(sizeof(stack));
|
||||
new->next = st;
|
||||
new->val = val;
|
||||
return new;
|
||||
}
|
||||
|
||||
int isEmpty(stack *st) { return st == NULL; }
|
||||
|
||||
int peek(stack *st) { return st->val; }
|
||||
|
||||
stack *pop(stack *st) {
|
||||
stack *tmp = st->next;
|
||||
free(st);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
stack *st = NULL;
|
||||
|
||||
int size = 0;
|
||||
int in;
|
||||
int last;
|
||||
int lastUsed = 0;
|
||||
int centFound = 0;
|
||||
|
||||
while (scanf("%d,", &in) != EOF) {
|
||||
size++;
|
||||
if (!isEmpty(st) && peek(st) == in) {
|
||||
st = pop(st);
|
||||
} else if (lastUsed == 1 && last == in) {
|
||||
st = pop(st);
|
||||
st = pop(st);
|
||||
centFound = 1;
|
||||
} else {
|
||||
if (!isEmpty(st)) {
|
||||
last = peek(st);
|
||||
lastUsed = 1;
|
||||
}
|
||||
// printf("PUSHING: %d\n", in);
|
||||
st = push(st, in);
|
||||
}
|
||||
}
|
||||
|
||||
if (size > 0 && isEmpty(st) && centFound == 1) {
|
||||
printf("Yes");
|
||||
} else if (size == 1) {
|
||||
printf("Yes");
|
||||
} else {
|
||||
printf("No");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
84
semester3/pset0/7-4-who-is-the-last.c
Normal file
84
semester3/pset0/7-4-who-is-the-last.c
Normal file
|
@ -0,0 +1,84 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct listNode {
|
||||
int id;
|
||||
struct listNode *next;
|
||||
int out;
|
||||
} listNode;
|
||||
|
||||
listNode *appendNode(int id, listNode *head) {
|
||||
listNode *new = malloc(sizeof(listNode));
|
||||
new->id = id;
|
||||
new->next = NULL;
|
||||
new->out = 0;
|
||||
|
||||
head->next = new;
|
||||
return new;
|
||||
}
|
||||
|
||||
listNode *makecircle(const int N) {
|
||||
listNode *head = malloc(sizeof(listNode));
|
||||
head->id = 1;
|
||||
head->next = NULL;
|
||||
head->out = 0;
|
||||
|
||||
listNode *ptr = head;
|
||||
for (int i = 2; i <= N; i++) {
|
||||
ptr = appendNode(i, ptr);
|
||||
// printf("appending: %d\n", i);
|
||||
}
|
||||
ptr->next = head;
|
||||
|
||||
return head;
|
||||
}
|
||||
|
||||
void printCircle(listNode *head) {
|
||||
if (head->out == 0) {
|
||||
printf("%d->", head->id);
|
||||
}
|
||||
head = head->next;
|
||||
while (head->id != 1) {
|
||||
if (head->out == 0) {
|
||||
printf("%d->", head->id);
|
||||
}
|
||||
head = head->next;
|
||||
}
|
||||
printf("|");
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
int N, M;
|
||||
scanf("%d,%d", &N, &M);
|
||||
|
||||
listNode *head = makecircle(N);
|
||||
// printCircle(head);
|
||||
|
||||
int count = N;
|
||||
int step = 0;
|
||||
listNode *ptr = head;
|
||||
while (count != 0) {
|
||||
while (step != M) {
|
||||
while (ptr->out == 1) {
|
||||
ptr = ptr->next;
|
||||
}
|
||||
ptr = ptr->next;
|
||||
step++;
|
||||
}
|
||||
step = 0;
|
||||
while (ptr->out == 1) {
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
||||
ptr->out = 1;
|
||||
count--;
|
||||
|
||||
if (count != 0) {
|
||||
printf("%d,", ptr->id);
|
||||
}
|
||||
}
|
||||
|
||||
printf("%d", ptr->id);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue