Strings

Problem Statement

C++ provides a nice alternative data type to manipulate strings, and the data type is conveniently called string. Some of its widely used features are the following:

  • Declaration:
    string a = "abc";
    
  • Size:
    int len = a.size();
    
  • Concatenate two strings:
    string a = "abc";
    string b = "def";
    string c = a + b; // c = "abcdef".
    
  • Assessing ith element:
    string s = "abc";
    char   c0 = s[0];   // c0 = 'a'
    char   c1 = s[1];   // c1 = 'b'
    char   c2 = s[2];   // c2 = 'c'
    
    s[0] = 'z';         // s = "zbc"
    

P.S.: We will use cin/cout to read/write a string.

Input Format

You are given two strings, a and b, separated by a new line. Each string will consist of lower case Latin characters (‘a’-‘z’).

Output Format

In the first line print two space-separated integers, representing the length of a and b respectively.
In the second line print the string produced by concatenating a and b (a+b).
In the third line print two space-separated strings, a and b. a and b are the same as a and b, respectively, except that their first characters are swapped.

Sample Input

abcd
ef

Sample Output

4 2
abcdef
ebcd af

Explanation

  • a=abcd
  • b=ef
  • |a|=4
  • |b|=2
  • a+b=abcdef
  • a=ebcd
  • b=af

Solution

  
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main() {
   // Complete the program
    string a,b;
    cin>>a>>b;
    cout<<a.size()<<" "<<b.size()<<endl;
    cout<<a+b<<endl;
    char t=a[0];
    a[0]=b[0];
    b[0]=t;
    cout<<a<<" "<<b;
    return 0;
}


For Loop

Problem Statement

A for loop is a programming language statement which allows code to be repeatedly executed.

The syntax for this is

for ( <expression_1> ; <expression_2> ; <expression_3> )
    <statement>
  • expression_1 is used for intializing variables which are generally used for controlling terminating flag for the loop.
  • expression_2 is used to check for the terminating condition. If this evaluates to false, then the loop is terminated.
  • expression_3 is generally used to update the flags/variables.

A sample loop will be

for(int i = 0; i < 10; i++) {
    ...
}

Input Format

You will be given two positive integers, a and b (ab), separated by a newline.

Output Format

For each integer n[a,b] (so all numbers in that range):

  • If 1n9, then print the English representation of it. That is “one” for 1, “two” for 2, and so on.
  • Else if n>9 and it is even, then print “even”.
  • Else if n>9 and it is odd, then print “odd”.

Note: [a,b] represents the interval, i.e., [a,b]={xZ| axb}={a, a+1,,b}

Sample Input

8
11

Sample Output

eight
nine
even
odd

Solution

  
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    // Complete the code.
    int a,b;
    cin>>a>>b;
    for(int n=a;n<=b;n++)
    {
     if(n>9)
       {
          if(n%2==0)
              cout<<"even"<<endl;
           else cout<<"odd"<<endl;
       }
    else if(n==9)
        cout<<"nine"<<endl;
    else if(n==1)
        cout<<"one"<<endl;
    else if(n==2)
        cout<<"two"<<endl;  
    else if(n==3)
        cout<<"three"<<endl;        
    else if(n==4)
        cout<<"four"<<endl; 
    else if(n==5)
        cout<<"five"<<endl;
    else if(n==6)
        cout<<"six"<<endl;
    else if(n==7)
        cout<<"seven"<<endl;      
    else
        cout<<"eight"<<endl; 
     
    }
    return 0;
}


Conditional Statements

Problem Statement

if and else are two of the most heavily used conditionals in C/C++. They are used to execute zero or one statement among many statements.

They are be used in the following three ways.

  1. if: It is used to execute a statement, given the condition is true.
    if(condition) {
        ...
    }
    
  2. if – else: It is used to execute exactly one of the two statements.
    if(first condition) {
        ...
    }
    else {
        ...
    }
    
  3. if – else if – else: It is used to execute one of the multiple statements.
    if(first condition) {
        ...
    }
    else if(second condition) {
        ...
    }
    .
    .
    .
    else if((n-1)'th condition) {
    
    }
    else {
        ...
    }
    

You are given a positive integer, n,:

  • If 1n9, then print the English representation of it. That is “one” for 1, “two” for 2, and so on.
  • Otherwise print “Greater than 9” (without quotes).

Input Format

Input will contain only one integer, n.

Output Format

Print the output as described above.

Sample Input

5

Sample Output

five

Sample Input #01

8

Sample Output #01

eight

Sample Input #02

44

Sample Output #02

Greater than 9

Solution


#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int n;
cin>>n;
if(n>9)
cout<<"Greater than 9"<<endl;
else if(n==9)
cout<<"nine"<<endl;
else if(n==1)
cout<<"one"<<endl;
else if(n==2)
cout<<"two"<<endl;
else if(n==3)
cout<<"three"<<endl;
else if(n==4)
cout<<"four"<<endl;
else if(n==5)
cout<<"five"<<endl;
else if(n==6)
cout<<"six"<<endl;
else if(n==7)
cout<<"seven"<<endl;
else
cout<<"eight"<<endl;

return 0;
}

 

Pointer

Problem Statement

A pointer in C is a way to share a memory address among different contexts (primarily functions). They are primarily used whenever a function needs to modify the content of a variable, of which it doesn’t have ownership.

In order to access the memory address of a variable, val, we need to prepend it with & sign. E.g., &val returns the memory address of val.

This memory address is assigned to a pointer and can be shared among various functions. E.g. intp=&val will assign the memory address of val to pointer p. To access the content of the memory to which the pointer points, prepend it with a . For example, p will return the value reflected by val and any modification to it will be reflected at the source (val).

void increment(int *v) {
    (*v)++;
}

int main() {
    int a;
    scanf("%d", &a);
    increment(&a);
    printf("%d", a);
    return 0;
}  

You have to complete the function void update(int *a,int *b), which reads two integers as argument, and sets a with the sum of them, and b with the absolute difference of them.

  • a=a+b
  • b=|ab|

Input Format

Input will contain two integers, a and b, separated by a newline.

Output Format

You have to print the updated value of a and b, on two different lines.
P.S.: Input/ouput will be automatically handled. You only have to complete the void update(int *a,int *b) function.

Sample Input

4
5

Sample Output

9
1

Explanation

  • a=4+5=9
  • b=|45|=1

Solution

  
#include <stdio.h>
#include <stdlib.h>

void update(int *a,int *b) {
    // Complete this function 
    *a = *a+*b;
    *b = abs(*a-*b-*b);
}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;
    
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}


Average Population of Each Continent

Problem Statement

Given two tables, City and Country whose description are given below. Print the name of all continents (key: Country.Continent) along with the average City population rounded down to nearest integer.

City

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

Country

+----------------+-------------+
| Field          | Type        |
+----------------+-------------+
| Code           | char(3)     |
| Name           | char(52)    |
| Continent      | char(50)    |
| Region         | char(26)    |
| SurfaceArea    | float(10,2) |
| IndepYear      | smallint(6) |
| Population     | int(11)     |
| LifeExpectancy | float(3,1)  |
| GNP            | float(10,2) |
| GNPOld         | float(10,2) |
| LocalName      | char(45)    |
| GovernmentForm | char(45)    |
| HeadOfState    | char(60)    |
| Capital        | int(11)     |
| Code2          | char(2)     |
+----------------+-------------+

PS #1: City.CountryCode and Country.Code is same key.
PS #2: Continent without cities should not be included in output.

Solution

  
Select Country.Continent,FLOOR(avg(City.Population)) from City Inner Join Country ON City.CountryCode = Country.Code Group by Country.Continent;

African Cities

Problem Statement

Given two tables, City and Country , whose descriptions are given below, you have to list the Name of all cities that are in the continent “Africa”.

City

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

Country

+----------------+-------------+
| Field          | Type        |
+----------------+-------------+
| Code           | char(3)     |
| Name           | char(52)    |
| Continent      | char(50)    |
| Region         | char(26)    |
| SurfaceArea    | float(10,2) |
| IndepYear      | smallint(6) |
| Population     | int(11)     |
| LifeExpectancy | float(3,1)  |
| GNP            | float(10,2) |
| GNPOld         | float(10,2) |
| LocalName      | char(45)    |
| GovernmentForm | char(45)    |
| HeadOfState    | char(60)    |
| Capital        | int(11)     |
| Code2          | char(2)     |
+----------------+-------------+

PS: City.CountryCode and Country.Code is same key.

Solution

  
Select City.Name from City Inner Join Country ON City.CountryCode = Country.Code and Continent='Africa';

Asian Population

Problem Statement

Given two tables, City and Country whose descriptions are given below. Find the sum of population of all the Cities that lies in “Asia” continent.

City

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

Country

+----------------+-------------+
| Field          | Type        |
+----------------+-------------+
| Code           | char(3)     |
| Name           | char(52)    |
| Continent      | char(50)    |
| Region         | char(26)    |
| SurfaceArea    | float(10,2) |
| IndepYear      | smallint(6) |
| Population     | int(11)     |
| LifeExpectancy | float(3,1)  |
| GNP            | float(10,2) |
| GNPOld         | float(10,2) |
| LocalName      | char(45)    |
| GovernmentForm | char(45)    |
| HeadOfState    | char(60)    |
| Capital        | int(11)     |
| Code2          | char(2)     |
+----------------+-------------+

PS: City.CountryCode and Country.Code is same key.

Solution

  
Select sum(City.Population) from City Inner Join Country ON City.CountryCode = Country.Code and Continent='Asia';

Population Density Difference

Problem Statement

Given a City table, whose fields are described as

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

print the difference between the maximum and minimum city populations.

Solution

  
select max(Population)-min(Population) from City;

Japan Population

Problem Statement

Given a City table, whose fields are described as

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

you have to print the sum of population of all the cities of Japan. The CountryCode for Japan is “JPN”.

Solution

  
select sum(Population) from City where CountryCode= 'JPN';

Average Population

Problem Statement

Given a City table, whose fields are described as

+-------------+----------+
| Field       | Type     |
+-------------+----------+
| ID          | int(11)  |
| Name        | char(35) |
| CountryCode | char(3)  |
| District    | char(20) |
| Population  | int(11)  |
+-------------+----------+

you have to print the average population of all cities, rounded down to the nearest integer.

Solution

  
select ROUND(avg(Population),0) from City;