Showing posts with label Array Rotations in C. Show all posts
Showing posts with label Array Rotations in C. Show all posts

Monday, 27 May 2019

Array Rotations Questions in C, Arrays: Left Rotation Hacker Rank Solution in C, Circular Array Rotation Hacker Rank Solution in C


Link to Question:
https://www.hackerrank.com/challenges/array-left-rotation/problem
https://www.hackerrank.com/challenges/ctci-array-left-rotation/problem

Program:
#include <stdio.h>

main()

{

 int n,i,d;

 scanf("%d%d",&n,&d);

 int a[n];

 for(i=0;i<n;i++)

  scanf("%d",&a[i]);

  for(i=d;i<d+n;i++)

   printf("%d ",a[i%n]); // we start printing from last index

 }

==============================================================
Circular Array Rotation

Link to Question
https://www.hackerrank.com/challenges/circular-array-rotation/problem

Program
#include <stdio.h>
int main()
{
    int n,i,k,q,j=0;
    scanf("%d%d%d",&n,&k,&q);
    int a[n],b[n];
    for(i=0;i<n;i++)
      scanf("%d",&a[i]);
    //after every n rotations, the rotated array becomes original array
    int r=k%n;
    for(int i=0;i<n;i++)
        b[(i+r)%n]=a[i];
    while(q--)
    {
        int id;
        scanf("%d",&id);
        printf("%d\n",b[id]);

    }
}
You can write the above program without using array b
by using
printf("%d\n",a[(n-(k%n)+m)%n]);
===============================================================================
Just understand the below two programs, you will be able to solve any array rotation problem
output:
5
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
1 2 3 4 5


#include <stdio.h>
main()
{
int n,i,j;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n+1;i++)
{
for(j=i;j<i+n;j++)
printf("%d ",a[j%n]); // we start printing from first index
printf("\n");
}
}

=======================================================================
output:
5
1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
3 4 5 1 2
2 3 4 5 1
1 2 3 4 5


#include <stdio.h>
main()
{
int n,i,j;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=n-1;i>=0;i--)
{
for(j=i;j<i+n;j++)
printf("%d ",a[j%n]); // we start printing from last index
printf("\n");
}
}