almost lost everything there :/
This commit is contained in:
1 parent
2930b7217d
commit
ad3ce0bd48
6 files changed
+217
-6
No files matched your search
+3
-6
@@ -7,13 +7,11 @@ Suppose we would like to implement a queue system for a commercial website.
|
|||||||
Given that the website offers a list of items, and each item has a limited quantity in stock, implement a queue of customers, such that each customer can buy only a few products among the available items.
|
Given that the website offers a list of items, and each item has a limited quantity in stock, implement a queue of customers, such that each customer can buy only a few products among the available items.
|
||||||
|
|
||||||
- Determine the item name, quantity, and price in stock.
|
- Determine the item name, quantity, and price in stock.
|
||||||
- Specify a queue of n customers; each customer can buy k products from one
|
- Specify a queue of n customers; each customer can buy k products from one item (k is different for each customer).
|
||||||
item (k is different for each customer).
|
|
||||||
- Customers take turns to enter (enqueue) and leave (dequeue) the queue according to the FIFO order to purchase wanted products.
|
- Customers take turns to enter (enqueue) and leave (dequeue) the queue according to the FIFO order to purchase wanted products.
|
||||||
- If a customer successfully purchases products, display a message and reduce the number of products in stock. Otherwise, display a warning message if the item has been run out.
|
- If a customer successfully purchases products, display a message and reduce the number of products in stock. Otherwise, display a warning message if the item has been run out.
|
||||||
|
|
||||||
Implement the above problems in C/C++ using a Queue data structure. Write
|
Implement the above problems in C/C++ using a Queue data structure. Write a main function for testing all written functions (init(), display(), enqueue(), dequeue(),...).
|
||||||
a main function for testing all written functions (init(), display(), enqueue(), dequeue(),...).
|
|
||||||
|
|
||||||
## ex 2
|
## ex 2
|
||||||
|
|
||||||
@@ -24,7 +22,6 @@ Choose one method to implement a Stack data structure (Array-based or Stack usin
|
|||||||
- A website may contain a url and a title; suppose that we have visited a list of websites.
|
- A website may contain a url and a title; suppose that we have visited a list of websites.
|
||||||
- The order of visited websites is stored in a Backward stack according to FILO.
|
- The order of visited websites is stored in a Backward stack according to FILO.
|
||||||
- If we return to the previous website, we pop the Backward stack and push it into the Forward stack.
|
- If we return to the previous website, we pop the Backward stack and push it into the Forward stack.
|
||||||
- And otherwise, when we forward to the next website, we retrieve the top
|
- And otherwise, when we forward to the next website, we retrieve the top website from the Forward stack and push it into the Backward stack.
|
||||||
website from the Forward stack and push it into the Backward stack.
|
|
||||||
|
|
||||||
Write a main function to test all written functions (init(), display(), push(), pop(),...).
|
Write a main function to test all written functions (init(), display(), push(), pop(),...).
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int calculate_iter(int n)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
while (n > 0)
|
||||||
|
{
|
||||||
|
c += n % 10;
|
||||||
|
n /= 10;
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
int calculate_recur(int n)
|
||||||
|
{
|
||||||
|
if (n <= 0)
|
||||||
|
return 0;
|
||||||
|
return n % 10 + calculate_iter(n / 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
// both complexity O(logn)
|
||||||
|
|
||||||
|
int main(int argc, char const *argv[])
|
||||||
|
{
|
||||||
|
int w;
|
||||||
|
printf("number: ");
|
||||||
|
scanf("%d", &w);
|
||||||
|
int a = calculate_iter(w);
|
||||||
|
int b = calculate_recur(w);
|
||||||
|
if (a != b)
|
||||||
|
printf("oops! %d != %d\n", a, b);
|
||||||
|
else
|
||||||
|
printf(" yay! %d == %d\n", a, b);
|
||||||
|
// main(argc, argv);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
bool _sphenic(int num, int cnt, int pr)
|
||||||
|
{
|
||||||
|
// Base case: If we have already found 3 distinct primes, check if the number is fully divided.
|
||||||
|
if (cnt == 3)
|
||||||
|
return num == 1;
|
||||||
|
|
||||||
|
// Try dividing the number by the next prime factor.
|
||||||
|
while (++pr <= num)
|
||||||
|
{
|
||||||
|
if (num % pr == 0)
|
||||||
|
{
|
||||||
|
num /= pr;
|
||||||
|
|
||||||
|
// If the same prime factor divides it again, it's not sphenic.
|
||||||
|
if (num % pr == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Recursively check for the next prime and increase the count of distinct primes.
|
||||||
|
return _sphenic(num, cnt + 1, pr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we run out of primes without finding 3 distinct ones, it's not sphenic.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool rsphenic(int n)
|
||||||
|
{
|
||||||
|
// Sphenic numbers are always greater than or equal to 30.
|
||||||
|
if (n < 30)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Initialize the recursion to start with prime checking from 2.
|
||||||
|
return _sphenic(n, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int N = 200;
|
||||||
|
|
||||||
|
for (int i = 1; i < N; i++)
|
||||||
|
{
|
||||||
|
// printf("%d\n", i);
|
||||||
|
|
||||||
|
if (rsphenic(i))
|
||||||
|
printf("%d ", i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# obj
|
||||||
|
|
||||||
|
verify whether a set of 3 values is a Pythagorean triple. A Pythagorean triple is a set of 3 positive numbers, which are expressed as a2 + b2 = c2.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
- (3, 5, 4) is a Pythagorean triple, 3^2 + 4^2 = 5^2.
|
||||||
|
- (10, 8, 6) is a Pythagorean triple, 6^2 + 8^2 = 10^2.
|
||||||
|
- (6, 8, 13) is not a Pythagorean triple.
|
||||||
|
|
||||||
|
## 1
|
||||||
|
|
||||||
|
- Write a pseudo-code to find all Pythagorean triples from a given array using Iteration.
|
||||||
|
- Implement your proposed algorithm in C/C++. You have to initialize a random array (any size >= 6, any value) in the main() function.
|
||||||
|
- Calculate the complexity of your algorithm. Justify the answer (comment directly in your source files).
|
||||||
|
|
||||||
|
## 2
|
||||||
|
|
||||||
|
- Propose another algorithm using recursive functions and implement in C/C++ to perform the above problem.
|
||||||
|
- Calculate the complexity of your algorithm. Justify the answer (comment directly in your source files).
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# i especially hate this one
|
||||||
|
|
||||||
|
## prompt
|
||||||
|
|
||||||
|
In this problem, we try to convert a decimal fraction into binary number. In the input, we are given an fraction decimal number n and integer k, convert decimal number n into equivalent binary number up-to k precision after decimal point.
|
||||||
|
|
||||||
|
We have to follow the algorithm:
|
||||||
|
|
||||||
|
1. Convert the integral part of decimal to binary equivalent:
|
||||||
|
|
||||||
|
- Divide the decimal number by 2 and store remainders in array.
|
||||||
|
- Divide the quotient by 2.
|
||||||
|
- Repeat step 2 until we get the quotient equal to zero.
|
||||||
|
- Equivalent binary number would be reverse of all remainders of step 1.
|
||||||
|
|
||||||
|
2. Convert the fractional part of decimal to binary equivalent
|
||||||
|
|
||||||
|
- Multiply the fractional decimal number by 2.
|
||||||
|
- Integral part of resultant decimal number will be first digit of fraction binary number.
|
||||||
|
- Repeat step 1 using only fractional part of decimal number and then step 2.
|
||||||
|
|
||||||
|
Let's take an example for n = 4.47, k = 4
|
||||||
|
Step 1: Conversion of 4 to binary
|
||||||
|
|
||||||
|
1. 4/2 : Remainder = 0 : Quotient = 2
|
||||||
|
2. 2/2 : Remainder = 0 : Quotient = 1
|
||||||
|
3. 1/2 : Remainder = 1 : Quotient = 0
|
||||||
|
|
||||||
|
So equivalent binary of integral part of decimal is 100.
|
||||||
|
|
||||||
|
Step 2: Conversion of .47 to binary
|
||||||
|
|
||||||
|
1. 0.47 \* 2 = 0.94, Integral part: 0
|
||||||
|
2. 0.94 \* 2 = 1.88, Integral part: 1
|
||||||
|
3. 0.88 \* 2 = 1.76, Integral part: 1
|
||||||
|
4. 0.76 \* 2 = 1.52, Integral part: 1
|
||||||
|
|
||||||
|
So equivalent binary of fractional part of decimal is .0111
|
||||||
|
The final result of conversion n = 4.47 (with precision k = 4): 100.0111
|
||||||
|
|
||||||
|
## 1
|
||||||
|
|
||||||
|
- Write a pseudo-code to convert a natural number into binary using Iteration.
|
||||||
|
- Implement your proposed algorithm in C/C++.
|
||||||
|
- Calculate the complexity of your algorithm. Justify the answer (comment directly in your source files).
|
||||||
|
|
||||||
|
## 2
|
||||||
|
|
||||||
|
- Propose another algorithm using recursive functions and implement in C/C++ to perform the above problem.
|
||||||
|
- Calculate the complexity of your algorithm. Justify the answer (comment directly in your source files).
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# id rather use chatgpt
|
||||||
|
|
||||||
|
## 1
|
||||||
|
|
||||||
|
Initialize a random array of your choice. The current goal is to verify whether an array number is
|
||||||
|
centered cube.
|
||||||
|
Note: a centered cube number is calculated by the following formula:
|
||||||
|
𝑓(𝑛) = 𝑛
|
||||||
|
3 + (𝑛 + 1)
|
||||||
|
3
|
||||||
|
For example, the centered cube numbers are:
|
||||||
|
f(1) = 1
|
||||||
|
3 + (1 + 1)
|
||||||
|
3 = 9
|
||||||
|
f(2) = 2
|
||||||
|
3 + (2 + 1)
|
||||||
|
3 = 8 + 27 = 35
|
||||||
|
f(3) = 3
|
||||||
|
3 + (3 + 1)
|
||||||
|
3 = 27 + 64 = 91
|
||||||
|
...
|
||||||
|
|
||||||
|
- Write pseudo-code using Recursion (if necessary, Iteration) to check all values in the given
|
||||||
|
array are centered cube or not.
|
||||||
|
- Write a program in C/C++ to complete your proposed algorithm in the pseudo-code. .
|
||||||
|
Note: The program must include a recursive function and the main function.
|
||||||
|
- Calculate the complexity of your algorithm. Justify the answer.
|
||||||
|
|
||||||
|
## 2
|
||||||
|
|
||||||
|
This problem requires to traverse and display a tree using the following process:
|
||||||
|
|
||||||
|
- Visit a node and find its child nodes.
|
||||||
|
- Put the child nodes into the queue.
|
||||||
|
- Pop a node in the queue and repeat the process until all nodes are visited.
|
||||||
|
Justify and print the traversal result for the below tree.
|
||||||
|
10
|
||||||
|
4 8
|
||||||
|
13 20 90
|
||||||
|
|
||||||
|
## 3
|
||||||
|
|
||||||
|
Given an array of n elements, the Bubble sort algorithm swaps repeatedly the adjacent elements
|
||||||
|
if they are in the wrong order (ascending order). We want to implement an improve version of this
|
||||||
|
sorting algorithm.
|
||||||
|
The idea is to sort both maximum (at the end) and minimum (at the beginning) in one pass and the
|
||||||
|
array is sorted from both ends.
|
||||||
|
|
||||||
|
- Traverse from left to right and compare adjacent elements and the maximum is placed at
|
||||||
|
right side.
|
||||||
|
- Traverse from right to left and compare adjacent elements and the minimum is placed at
|
||||||
|
left side.
|
||||||
|
- Repeat the process until the array is sorted.
|
||||||
|
Implement this algorithm in C/C++. Calculate the complexity of the above algorithm. Justify your
|
||||||
|
answer.
|
||||||
Reference in new issue
Block a user