Bird
Raised Fist0
DSA Cprogramming~10 mins

Activity Selection Problem in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare the array that stores the finish times of activities.

DSA C
int finish[] = {1, 3, 6, 5, 8, 9};
int start[] = {0, 1, 3, 4, 6, 8};
int n = sizeof(finish)/sizeof(finish[0]);

// The array to store finish times is called [1];
Drag options to blanks, or click blank then click option'
Astart
Bfinish
Cactivities
Dtimes
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing start times with finish times.
Using an undefined variable name.
2fill in blank
medium

Complete the code to select the first activity by initializing the index.

DSA C
int i = 0; // Select the first activity
int count = 1; // Count of selected activities

for (int j = 1; j < n; j++) {
    if (start[j] >= finish[[1]]) {
        i = j;
        count++;
    }
}
Drag options to blanks, or click blank then click option'
An
Bcount
Cj
Di
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'j' instead of 'i' to check finish time.
Comparing with 'count' or 'n' which are not indices.
3fill in blank
hard

Fix the error in the loop condition to correctly iterate over all activities.

DSA C
for (int j = 1; j [1] n; j++) {
    if (start[j] >= finish[i]) {
        i = j;
        count++;
    }
}
Drag options to blanks, or click blank then click option'
A>
B<=
C<
D>=
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<=' causes out-of-bounds access.
Using '>' or '>=' causes the loop to never run.
4fill in blank
hard

Fill both blanks to complete the function header and return statement for counting selected activities.

DSA C
int activitySelection(int [1][], int [2][], int n) {
    int count = 1;
    int i = 0;
    for (int j = 1; j < n; j++) {
        if ([1][j] >= [2][i]) {
            i = j;
            count++;
        }
    }
    return count;
}
Drag options to blanks, or click blank then click option'
Astart
Bfinish
Cactivities
Dtimes
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping start and finish arrays.
Using incorrect parameter names.
5fill in blank
hard

Fill all three blanks to complete the main function that calls activitySelection and prints the result.

DSA C
#include <stdio.h>

int activitySelection(int [1][], int [2][], int n);

int main() {
    int start[] = {1, 3, 0, 5, 8, 5};
    int finish[] = {2, 4, 6, 7, 9, 9};
    int n = sizeof(start)/sizeof(start[0]);

    int result = activitySelection(start, finish, [3]);
    printf("Number of activities selected: %d\n", result);
    return 0;
}
Drag options to blanks, or click blank then click option'
Astart
Bfinish
Cn
Dcount
Attempts:
3 left
💡 Hint
Common Mistakes
Passing arrays in wrong order.
Passing wrong variable for number of activities.

Practice

(1/5)
1. What is the main goal of the Activity Selection Problem?
easy
A. Calculate the total time of all activities
B. Find the activity with the longest duration
C. Select the maximum number of activities that don't overlap in time
D. Sort activities by their start time

Solution

  1. Step 1: Understand the problem goal

    The Activity Selection Problem aims to choose the largest set of activities that do not overlap in their time intervals.
  2. Step 2: Identify the correct goal

    Among the options, only selecting the maximum number of non-overlapping activities matches the problem's goal.
  3. Final Answer:

    Select the maximum number of activities that don't overlap in time -> Option C
  4. Quick Check:

    Goal = Max non-overlapping activities [OK]
Hint: Choose activities that finish earliest to fit more [OK]
Common Mistakes:
  • Confusing longest duration with maximum count
  • Sorting by start time only
  • Trying to sum all activity times
2. Which of the following C code snippets correctly sorts activities by their finish time for the Activity Selection Problem?
easy
A. qsort(activities, n, sizeof(Activity), compareStart);
B. qsort(activities, n, sizeof(Activity), compareFinish);
C. sort(activities, n, sizeof(Activity), compareDuration);
D. qsort(activities, n, sizeof(Activity), compareName);

Solution

  1. Step 1: Identify sorting criteria

    For the Activity Selection Problem, activities must be sorted by their finish time to select the maximum number of non-overlapping activities.
  2. Step 2: Match sorting function

    Only qsort with compareFinish sorts by finish time correctly.
  3. Final Answer:

    qsort(activities, n, sizeof(Activity), compareFinish); -> Option B
  4. Quick Check:

    Sort by finish time = qsort + compareFinish [OK]
Hint: Sort activities by finish time using qsort and compareFinish [OK]
Common Mistakes:
  • Sorting by start time instead of finish time
  • Using undefined compare functions
  • Using wrong sorting function name
3. What is the output of the following C code snippet for the Activity Selection Problem?
typedef struct {
  int start;
  int finish;
} Activity;

Activity activities[] = {{1, 4}, {3, 5}, {0, 6}, {5, 7}, {8, 9}, {5, 9}};
int n = 6;

// Assume activities are sorted by finish time
int count = 1;
int last_finish = activities[0].finish;
for (int i = 1; i < n; i++) {
  if (activities[i].start >= last_finish) {
    count++;
    last_finish = activities[i].finish;
  }
}
printf("%d\n", count);
medium
A. 6
B. 3
C. 5
D. 4

Solution

  1. Step 1: Trace the selection process

    Activities sorted by finish time: (1,4), (3,5), (0,6), (5,7), (8,9), (5,9). Start with count=1, last_finish=4.
    Check each activity:
    - (3,5): start 3 < 4, skip
    - (0,6): start 0 < 4, skip
    - (5,7): start 5 >= 4, select, count=2, last_finish=7
    - (8,9): start 8 >= 7, select, count=3, last_finish=9
    - (5,9): start 5 < 9, skip
  2. Step 2: Final count of selected activities

    Total selected activities = 4
  3. Final Answer:

    4 -> Option D
  4. Quick Check:

    Selected count = 4 [OK]
Hint: Count activities starting after last selected finish time [OK]
Common Mistakes:
  • Not sorting activities by finish time
  • Selecting overlapping activities
  • Incorrectly updating last_finish
4. Identify the error in the following C code snippet for the Activity Selection Problem:
typedef struct {
  int start;
  int finish;
} Activity;

Activity activities[] = {{1, 3}, {2, 5}, {4, 7}};
int n = 3;

// Activities are sorted by finish time
int count = 0;
int last_finish = 0;
for (int i = 0; i < n; i++) {
  if (activities[i].start > last_finish) {
    count++;
    last_finish = activities[i].finish;
  }
}
printf("%d\n", count);
medium
A. The condition should be activities[i].start >= last_finish
B. The loop should start from i = 1, not 0
C. last_finish should be initialized to activities[0].finish
D. The activities array is not sorted

Solution

  1. Step 1: Analyze the selection condition

    The condition uses '>' which excludes activities starting exactly at last_finish time. It should allow activities starting at or after last_finish, so '>=' is correct.
  2. Step 2: Check other parts

    Starting loop at 0 and initializing last_finish to 0 is fine if condition is corrected. The activities are sorted as stated.
  3. Final Answer:

    The condition should be activities[i].start >= last_finish -> Option A
  4. Quick Check:

    Use >= to include activities starting at last finish [OK]
Hint: Use >= to allow activities starting exactly at last finish [OK]
Common Mistakes:
  • Using > excludes valid activities
  • Starting loop from 1 unnecessarily
  • Wrong initialization of last_finish
5. Given the following activities with start and finish times:
Activities = [(1, 2), (3, 4), (0, 6), (5, 7), (8, 9), (5, 9)]

Which set of activities represents the maximum number of non-overlapping activities selected by the greedy algorithm?
hard
A. [(1, 2), (3, 4), (5, 7), (8, 9)]
B. [(0, 6), (5, 7), (8, 9)]
C. [(1, 2), (5, 9)]
D. [(3, 4), (5, 7), (8, 9)]

Solution

  1. Step 1: Sort activities by finish time

    Sorted activities: (1,2), (3,4), (0,6), (5,7), (8,9), (5,9)
  2. Step 2: Select activities greedily

    Select (1,2) first.
    Next, (3,4) starts after 2, select.
    (0,6) overlaps, skip.
    (5,7) starts after 4, select.
    (8,9) starts after 7, select.
    (5,9) overlaps, skip.
    Selected set: [(1,2), (3,4), (5,7), (8,9)]
  3. Final Answer:

    [(1, 2), (3, 4), (5, 7), (8, 9)] -> Option A
  4. Quick Check:

    Greedy selects max non-overlapping activities [OK]
Hint: Pick earliest finishing activities to maximize count [OK]
Common Mistakes:
  • Choosing overlapping activities
  • Not sorting by finish time
  • Selecting longer activities first
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard