Hackerrank Accessing Inherited Functions Solution
2 min read

Hackerrank Accessing Inherited Functions Solution

Hackerrank Accessing Inherited Functions Solution

You are given three classes A, B and C. All three classes implement their own version of func.

In class A, func  multiplies the value passed as a parameter by :

class A
{
    public:
        A(){
            callA = 0;
        }
    private:
        int callA;
        void inc(){
            callA++;
        }

    protected:
        void func(int & a)
        {
            a = a * 2;
            inc();
        }
    public:
        int getA(){
            return callA;
        }
};

In class B, func multiplies the value passed as a parameter by :

class B
{
    public:
        B(){
            callB = 0;
        }
    private:
        int callB;
        void inc(){
            callB++;
        }
    protected:
        void func(int & a)
        {
            a = a * 3;
            inc();
        }
    public:
        int getB(){
            return callB;
        }
};

In class C, func multiplies the value passed as a parameter by :

class C
{
    public:
        C(){
            callC = 0;
        }
    private:
        int callC;
        void inc(){
            callC++;
        }
    protected:
        void func(int & a)
        {
            a = a * 5;
            inc();
        }
    public:
        int getC(){
            return callC;
        }
};

You are given a class D:

class D 
{

	int val;
	public:
		//Initially val is 1
		 D()
		 {
		 	val = 1;
		 }


		 //Implement this function
		 void update_val(int new_val)
		 {

			
		 }
		 //For Checking Purpose
		 void check(int); //Do not delete this line.
};

You need to modify the class D and implement the function update_val  which sets D's val to new_val by manipulating the value by only calling the func defined in classes A, B and C.

It is guaranteed that new_val has only  and  as its prime factors.

Input Format

Implement class D's function update_val. This function should update D's val only by calling A, B and C's func.

Constraints

new_val  
Note: The new_val only has  and  as its prime factors.

Sample Input

new_val

Sample Output

A's func will be called once.
B's func will be called once.
C's func will be called once.

Explanation

Initially, val .

A's func is called once:

val = val*2  
val = 2

B's func is called once:

val = val*3
val = 6

C's func is called once:

val = val*5
val = 30

Solution in cpp

Approach 1.

class D:public A,public B,public C
{

	int val;
	public:
		//Initially val is 1
		 D()
		 {
		 	val=1;
		 }


		 //Implement this function
		 void update_val(int new_val)
		 {

             int a=new_val;
             while ( a %2 == 0)
     {
         a = a/2;
         A::func(val);
     }
     while ( a % 3 == 0)
     {
         a = a/3;
         B::func(val);
     }
     while ( a % 5 == 0)
     {
         a = a/5;
         C::func(val);
     }
		 }
		 //For Checking Purpose
		 void check(int); //Do not delete this line.
};

Approach 2.

class D : A, B, C
{

	int val;
	public:
		//Initially val is 1
		 D()
		 {
		 	val=1;
		 }


		 //Implement this function
		 void update_val(int new_val)
		 {
            while (new_val % 5 == 0) {
                new_val /= 5;
                C::func(val);
            }
            while (new_val % 3 == 0) {
                new_val /= 3;
                B::func(val);
            }
            while (new_val % 2 == 0) {
                new_val /= 2;
                A::func(val);
            }
			
		 }
		 //For Checking Purpose
		 void check(int); //Do not delete this line.
};

Approach 3.

class D : public A,public B,public C
{

	int val;
	public:
		//Initially val is 1
		 D()
		 {
		 	val=1;
		 }


		 //Implement this function
		 void update_val(int new_val)
		 {
            while(new_val % 2 == 0){
                new_val /= 2;
                A::func(val);
            }
             while(new_val % 3 == 0){
                 new_val /= 3;
                 B::func(val);
             }   
             while(new_val % 5 == 0){
                 new_val /= 5;
                 C::func(val);
             }
              
			
		 }
		 //For Checking Purpose
		 void check(int); //Do not delete this line.
};

Enjoying these posts? Subscribe for more


Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

That's okay. But without advertising-income, we can't keep making this site awesome.

We don't have any banner, Flash, animation, obnoxious sound, or popup ad. We do not implement these annoying types of ads!

We need money to operate the site, and almost all of it comes from our online advertising.

Please add thepoorcoder.com to your ad blocking whitelist or disable your adblocking software.

×