1. Write a program to give the following output for the given input
Eg 1: Input: a1b10
Output: abbbbbbbbbb
Eg: 2: Input: b3c6d15
Output: bbbccccccddddddddddddddd
The number varies from 1 to 99.
Solutions:
C
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void expandString(const char *input) {
    while (*input) {
        char ch = *input++;
        int num = 0;
        while (isdigit(*input)) {
            num = num * 10 + (*input++ - '0');
        }
        for (int i = 0; i < num; i++) {
            putchar(ch);
        }
    }
    putchar('\n');
}
int main() {
    char input[100];
    printf("Enter input: ");
    scanf("%s", input);
    expandString(input);
    return 0;
}
C++
#include <iostream>
#include <string>
#include <cctype>
void expandString(const std::string &input) {
    for (size_t i = 0; i < input.length();) {
        char ch = input[i++];
        int num = 0;
        while (i < input.length() && std::isdigit(input[i])) {
            num = num * 10 + (input[i++] - '0');
        }
        for (int j = 0; j < num; j++) {
            std::cout << ch;
        }
    }
    std::cout << std::endl;
}
int main() {
    std::string input;
    std::cout << "Enter input: ";
    std::cin >> input;
    expandString(input);
    return 0;
}
Java
import java.util.Scanner;
public class ExpandString {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter input: ");
        String input = scanner.next();
        scanner.close();
        expandString(input);
    }
    public static void expandString(String input) {
        for (int i = 0; i < input.length();) {
            char ch = input.charAt(i++);
            int num = 0;
            while (i < input.length() && Character.isDigit(input.charAt(i))) {
                num = num * 10 + (input.charAt(i++) - '0');
            }
            for (int j = 0; j < num; j++) {
                System.out.print(ch);
            }
        }
        System.out.println();
    }
}
Python
def expand_string(input):
    i = 0
    while i < len(input):
        ch = input[i]
        i += 1
        num = 0
        while i < len(input) and input[i].isdigit():
            num = num * 10 + int(input[i])
            i += 1
        print(ch * num, end='')
    print()
input_str = input("Enter input: ")
expand_string(input_str)
2. Write a program to sort the elements in odd positions in descending order and elements in ascending order
Eg 1: Input: 13,2 4,15,12,10,5
Output: 13,2,12,10,5,15,4
Eg 2: Input: 1,2,3,4,5,6,7,8,9
        Output: 9,2,7,4,5,6,3,8,1
 
C
#include <stdio.h>
#include <stdlib.h>
int compare_desc(const void *a, const void *b) {
    return (*(int *)b - *(int *)a);
}
int compare_asc(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}
void sort_odd_even_positions(int *arr, int size) {
    int odd_count = (size + 1) / 2;
    int even_count = size / 2;
    int *odd_positions = (int *)malloc(odd_count * sizeof(int));
    int *even_positions = (int *)malloc(even_count * sizeof(int));
    int odd_index = 0, even_index = 0;
    for (int i = 0; i < size; i++) {
        if (i % 2 == 0) {
            odd_positions[odd_index++] = arr[i];
        } else {
            even_positions[even_index++] = arr[i];
        }
    }
    qsort(odd_positions, odd_count, sizeof(int), compare_desc);
    qsort(even_positions, even_count, sizeof(int), compare_asc);
    odd_index = 0;
    even_index = 0;
    for (int i = 0; i < size; i++) {
        if (i % 2 == 0) {
            arr[i] = odd_positions[odd_index++];
        } else {
            arr[i] = even_positions[even_index++];
        }
    }
    free(odd_positions);
    free(even_positions);
}
int main() {
    int arr[] = {13, 2, 4, 15, 12, 10, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    sort_odd_even_positions(arr, size);
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}
C++
#include <iostream>
#include <vector>
#include <algorithm>
void sort_odd_even_positions(std::vector<int>& arr) {
    std::vector<int> odd_positions, even_positions;
    for (size_t i = 0; i < arr.size(); ++i) {
        if (i % 2 == 0) {
            odd_positions.push_back(arr[i]);
        } else {
            even_positions.push_back(arr[i]);
        }
    }
    std::sort(odd_positions.begin(), odd_positions.end(), std::greater<int>());
    std::sort(even_positions.begin(), even_positions.end());
    size_t odd_index = 0, even_index = 0;
    for (size_t i = 0; i < arr.size(); ++i) {
        if (i % 2 == 0) {
            arr[i] = odd_positions[odd_index++];
        } else {
            arr[i] = even_positions[even_index++];
        }
    }
}
int main() {
    std::vector<int> arr = {13, 2, 4, 15, 12, 10, 5};
    sort_odd_even_positions(arr);
    for (int num : arr) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}
Java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortOddEven {
    public static void main(String[] args) {
        int[] arr = {13, 2, 4, 15, 12, 10, 5};
        sortOddEvenPositions(arr);
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
    public static void sortOddEvenPositions(int[] arr) {
        List<Integer> oddPositions = new ArrayList<>();
        List<Integer> evenPositions = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            if (i % 2 == 0) {
                oddPositions.add(arr[i]);
            } else {
                evenPositions.add(arr[i]);
            }
        }
        Collections.sort(oddPositions, Collections.reverseOrder());
        Collections.sort(evenPositions);
        int oddIndex = 0, evenIndex = 0;
        for (int i = 0; i < arr.length; i++) {
            if (i % 2 == 0) {
                arr[i] = oddPositions.get(oddIndex++);
            } else {
                arr[i] = evenPositions.get(evenIndex++);
            }
        }
    }
}
Python
def sort_odd_even_positions(arr):
    odd_positions = [arr[i] for i in range(len(arr)) if i % 2 == 0]
    even_positions = [arr[i] for i in range(len(arr)) if i % 2 != 0]
    odd_positions.sort(reverse=True)
    even_positions.sort()
    odd_index = 0
    even_index = 0
    for i in range(len(arr)):
        if i % 2 == 0:
            arr[i] = odd_positions[odd_index]
            odd_index += 1
        else:
            arr[i] = even_positions[even_index]
            even_index += 1
arr = [13, 2, 4, 15, 12, 10, 5]
sort_odd_even_positions(arr)
print(arr)
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
sort_odd_even_positions(arr)
print(arr)
3. Write a program to print the following output for the given input. You can assume the string is of odd length
Eg 1: Input: 12345
Output:
1 5
2 4
3
2 4
1 5
Eg 2: Input: geeksforgeeks
Output:
g s
e k
e e
k e
s g
f r
o
f r
s g
k e
e e
e k
g s
C
#include <stdio.h>
#include <string.h>
void printPattern(char *str) {
    int len = strlen(str);
    int mid = len / 2;
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < len; j++) {
            if (j == i) {
                printf("%c", str[j]);
            } else if (j == len - i - 1) {
                printf("%c", str[j]);
            } else {
                printf(" ");
            }
        }
        printf("\n");
    }
}
int main() {
    char input1[] = "12345";
    char input2[] = "geeksforgeeks";
    printf("Output for input: %s\n", input1);
    printPattern(input1);
    printf("\nOutput for input: %s\n", input2);
    printPattern(input2);
    return 0;
}
C++
#include <iostream>
#include <string>
void printPattern(const std::string &str) {
    int len = str.length();
    for (int i = 0; i < len; ++i) {
        for (int j = 0; j < len; ++j) {
            if (j == i || j == len - i - 1) {
                std::cout << str[j];
            } else {
                std::cout << " ";
            }
        }
        std::cout << std::endl;
    }
}
int main() {
    std::string input1 = "12345";
    std::string input2 = "geeksforgeeks";
    std::cout << "Output for input: " << input1 << std::endl;
    printPattern(input1);
    std::cout << "\nOutput for input: " << input2 << std::endl;
    printPattern(input2);
    return 0;
}
Java
public class PrintPattern {
    public static void main(String[] args) {
        String input1 = "12345";
        String input2 = "geeksforgeeks";
        System.out.println("Output for input: " + input1);
        printPattern(input1);
        System.out.println("\nOutput for input: " + input2);
        printPattern(input2);
    }
    public static void printPattern(String str) {
        int len = str.length();
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                if (j == i || j == len - i - 1) {
                    System.out.print(str.charAt(j));
                } else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}
Python
def print_pattern(s):
    length = len(s)
    for i in range(length):
        for j in range(length):
            if j == i or j == length - i - 1:
                print(s[j], end='')
            else:
                print(' ', end='')
        print()
input1 = "12345"
input2 = "geeksforgeeks"
print("Output for input:", input1)
print_pattern(input1)
print("\nOutput for input:", input2)
print_pattern(input2)
4. Find if a String2 is substring of String1. If it is, return the index of the first occurrence. else return -1.
Eg 1:Input:
String 1: test123string
String 2: 123
Output: 4
Eg 2: Input:
String 1: testing12
String 2: 1234
Output: -1
C
#include <stdio.h>
#include <string.h>
int findSubstring(char *str1, char *str2) {
    char *pos = strstr(str1, str2);
    if (pos) {
        return pos - str1;
    }
    return -1;
}
int main() {
    char str1[] = "test123string";
    char str2[] = "123";
    printf("Output: %d\n", findSubstring(str1, str2));  // Output: 4
    char str3[] = "testing12";
    char str4[] = "1234";
    printf("Output: %d\n", findSubstring(str3, str4));  // Output: -1
    return 0;
}
C++
#include <iostream>
#include <string>
int findSubstring(const std::string &str1, const std::string &str2) {
    size_t pos = str1.find(str2);
    if (pos != std::string::npos) {
        return pos;
    }
    return -1;
}
int main() {
    std::string str1 = "test123string";
    std::string str2 = "123";
    std::cout << "Output: " << findSubstring(str1, str2) << std::endl;  // Output: 4
    std::string str3 = "testing12";
    std::string str4 = "1234";
    std::cout << "Output: " << findSubstring(str3, str4) << std::endl;  // Output: -1
    return 0;
}
Java
public class FindSubstring {
    public static void main(String[] args) {
        String str1 = "test123string";
        String str2 = "123";
        System.out.println("Output: " + findSubstring(str1, str2));  // Output: 4
        String str3 = "testing12";
        String str4 = "1234";
        System.out.println("Output: " + findSubstring(str3, str4));  // Output: -1
    }
    public static int findSubstring(String str1, String str2) {
        int index = str1.indexOf(str2);
        return index;
    }
}
Python
def find_substring(str1, str2):
    index = str1.find(str2)
    return index
str1 = "test123string"
str2 = "123"
print("Output:", find_substring(str1, str2))  # Output: 4
str3 = "testing12"
str4 = "1234"
print("Output:", find_substring(str3, str4))  # Output: -1
5. Given two sorted arrays, merge them such that the elements are not repeated
Eg 1: Input:
Array 1: 2,4,5,6,7,9,10,13
Array 2: 2,3,4,5,6,7,8,9,11,15
Output:
Merged array: 2,3,4,5,6,7,8,9,10,11,13,15
C
#include <stdio.h>
void mergeArrays(int arr1[], int len1, int arr2[], int len2, int merged[], int *merged_len) {
    int i = 0, j = 0, k = 0;
   
    while (i < len1 && j < len2) {
        if (arr1[i] < arr2[j]) {
            if (k == 0 || merged[k - 1] != arr1[i]) {
                merged[k++] = arr1[i];
            }
            i++;
        } else if (arr1[i] > arr2[j]) {
            if (k == 0 || merged[k - 1] != arr2[j]) {
                merged[k++] = arr2[j];
            }
            j++;
        } else {
            if (k == 0 || merged[k - 1] != arr1[i]) {
                merged[k++] = arr1[i];
            }
            i++;
            j++;
        }
    }
   
    while (i < len1) {
        if (k == 0 || merged[k - 1] != arr1[i]) {
            merged[k++] = arr1[i];
        }
        i++;
    }
   
    while (j < len2) {
        if (k == 0 || merged[k - 1] != arr2[j]) {
            merged[k++] = arr2[j];
        }
        j++;
    }
   
    *merged_len = k;
}
int main() {
    int arr1[] = {2, 4, 5, 6, 7, 9, 10, 13};
    int arr2[] = {2, 3, 4, 5, 6, 7, 8, 9, 11, 15};
    int len1 = sizeof(arr1) / sizeof(arr1[0]);
    int len2 = sizeof(arr2) / sizeof(arr2[0]);
    int merged[len1 + len2];
    int merged_len;
    mergeArrays(arr1, len1, arr2, len2, merged, &merged_len);
    printf("Merged array: ");
    for (int i = 0; i < merged_len; i++) {
        printf("%d ", merged[i]);
    }
    printf("\n");
    return 0;
}
C++
#include <iostream>
#include <vector>
#include <algorithm>
std::vector<int> mergeArrays(const std::vector<int>& arr1, const std::vector<int>& arr2) {
    std::vector<int> merged;
    int i = 0, j = 0;
   
    while (i < arr1.size() && j < arr2.size()) {
        if (arr1[i] < arr2[j]) {
            if (merged.empty() || merged.back() != arr1[i]) {
                merged.push_back(arr1[i]);
            }
            i++;
        } else if (arr1[i] > arr2[j]) {
            if (merged.empty() || merged.back() != arr2[j]) {
                merged.push_back(arr2[j]);
            }
            j++;
        } else {
            if (merged.empty() || merged.back() != arr1[i]) {
                merged.push_back(arr1[i]);
            }
            i++;
            j++;
        }
    }
   
    while (i < arr1.size()) {
        if (merged.empty() || merged.back() != arr1[i]) {
            merged.push_back(arr1[i]);
        }
        i++;
    }
   
    while (j < arr2.size()) {
        if (merged.empty() || merged.back() != arr2[j]) {
            merged.push_back(arr2[j]);
        }
        j++;
    }
   
    return merged;
}
int main() {
    std::vector<int> arr1 = {2, 4, 5, 6, 7, 9, 10, 13};
    std::vector<int> arr2 = {2, 3, 4, 5, 6, 7, 8, 9, 11, 15};
    std::vector<int> merged = mergeArrays(arr1, arr2);
    std::cout << "Merged array: ";
    for (int num : merged) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}
Java
import java.util.ArrayList;
import java.util.List;
public class MergeSortedArrays {
    public static void main(String[] args) {
        int[] arr1 = {2, 4, 5, 6, 7, 9, 10, 13};
        int[] arr2 = {2, 3, 4, 5, 6, 7, 8, 9, 11, 15};
        List<Integer> merged = mergeArrays(arr1, arr2);
        System.out.print("Merged array: ");
        for (int num : merged) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
    public static List<Integer> mergeArrays(int[] arr1, int[] arr2) {
        List<Integer> merged = new ArrayList<>();
        int i = 0, j = 0;
        while (i < arr1.length && j < arr2.length) {
            if (arr1[i] < arr2[j]) {
                if (merged.isEmpty() || !merged.get(merged.size() - 1).equals(arr1[i])) {
                    merged.add(arr1[i]);
                }
                i++;
            } else if (arr1[i] > arr2[j]) {
                if (merged.isEmpty() || !merged.get(merged.size() - 1).equals(arr2[j])) {
                    merged.add(arr2[j]);
                }
                j++;
            } else {
                if (merged.isEmpty() || !merged.get(merged.size() - 1).equals(arr1[i])) {
                    merged.add(arr1[i]);
                }
                i++;
                j++;
            }
        }
        while (i < arr1.length) {
            if (merged.isEmpty() || !merged.get(merged.size() - 1).equals(arr1[i])) {
                merged.add(arr1[i]);
            }
            i++;
        }
        while (j < arr2.length) {
            if (merged.isEmpty() || !merged.get(merged.size() - 1).equals(arr2[j])) {
                merged.add(arr2[j]);
            }
            j++;
        }
        return merged;
    }
}
Python
def merge_arrays(arr1, arr2):
    merged = []
    i, j = 0, 0
   
    while i < len(arr1) and j < len(arr2):
        if arr1[i] < arr2[j]:
            if not merged or merged[-1] != arr1[i]:
                merged.append(arr1[i])
            i += 1
        elif arr1[i] > arr2[j]:
            if not merged or merged[-1] != arr2[j]:
                merged.append(arr2[j])
            j += 1
        else:
            if not merged or merged[-1] != arr1[i]:
                merged.append(arr1[i])
            i += 1
            j += 1
   
    while i < len(arr1):
        if not merged or merged[-1] != arr1[i]:
            merged.append(arr1[i])
        i += 1
   
    while j < len(arr2):
        if not merged or merged[-1] != arr2[j]:
            merged.append(arr2[j])
        j += 1
   
    return merged
arr1 = [2, 4, 5, 6, 7, 9, 10, 13]
arr2 = [2, 3, 4, 5, 6, 7, 8, 9, 11, 15]
merged = merge_arrays(arr1, arr2)
print("Merged array:", merged)
6. Using Recursion reverse the string such as
Eg 1: Input: one two three
Output: three two one
Eg 2: Input: I love india
Output: india love I
C
#include <stdio.h>
#include <string.h>
void reverseWords(char *str, int start, int end) {
    if (start >= end) {
        return;
    }
    int i = end;
    while (i >= start && str[i] != ' ') {
        i--;
    }
    printf("%s ", &str[i + 1]);
    reverseWords(str, start, i - 1);
}
int main() {
    char input1[] = "one two three";
    char input2[] = "I love india";
    printf("Output: ");
    reverseWords(input1, 0, strlen(input1) - 1);
    printf("\n");
    printf("Output: ");
    reverseWords(input2, 0, strlen(input2) - 1);
    printf("\n");
    return 0;
}
C++
#include <iostream>
#include <string>
void reverseWords(const std::string &str, int start, int end) {
    if (start >= end) {
        return;
    }
    int i = end;
    while (i >= start && str[i] != ' ') {
        i--;
    }
    std::cout << str.substr(i + 1, end - i) << " ";
    reverseWords(str, start, i - 1);
}
int main() {
    std::string input1 = "one two three";
    std::string input2 = "I love india";
    std::cout << "Output: ";
    reverseWords(input1, 0, input1.length() - 1);
    std::cout << std::endl;
    std::cout << "Output: ";
    reverseWords(input2, 0, input2.length() - 1);
    std::cout << std::endl;
    return 0;
}
Java
public class ReverseWords {
    public static void main(String[] args) {
        String input1 = "one two three";
        String input2 = "I love india";
        System.out.print("Output: ");
        reverseWords(input1, 0, input1.length() - 1);
        System.out.println();
        System.out.print("Output: ");
        reverseWords(input2, 0, input2.length() - 1);
        System.out.println();
    }
    public static void reverseWords(String str, int start, int end) {
        if (start > end) {
            return;
        }
        int i = end;
        while (i >= start && str.charAt(i) != ' ') {
            i--;
        }
        System.out.print(str.substring(i + 1, end + 1) + " ");
        reverseWords(str, start, i - 1);
    }
}
Python
def reverse_words(s, start, end):
    if start > end:
        return
   
    i = end
    while i >= start and s[i] != ' ':
        i -= 1
    print(s[i+1:end+1], end=' ')
    reverse_words(s, start, i-1)
input1 = "one two three"
input2 = "I love india"
print("Output:", end=' ')
reverse_words(input1, 0, len(input1) - 1)
print()
print("Output:", end=' ')
reverse_words(input2, 0, len(input2) - 1)
print()