Вы находитесь на странице: 1из 9

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void Q1();
void Q2();
void Q3();
void Q4();
void Q5();
void Q6();
void Q7();
void Q8();
void Q9();
void Q10();
void Q11();
void Q12();
void Q13();
void Q14();
void Q15();
void Q16();

int main()
{
int choice;

while(1) {
printf("Enter Question Number: ");
scanf("%d", &choice);
switch(choice) {
case 1: Q1(); break;
case 2: Q2(); break;
case 3: Q3(); break;
case 4: Q4(); break;
case 5: Q5(); break;
case 6: Q6(); break;
case 7: Q7(); break;
case 8: Q8(); break;
case 9: Q9(); break;
case 10: Q10(); break;
case 11: Q11(); break;
case 12: Q12(); break;
case 13: Q13(); break;
case 14: Q14(); break;
default: return 0;
}
}

return 0;
}

void Q1()
{
int i, n, max, secmax;
do {
printf("Enter an non-negative integer n >= 2:");
scanf("%d", &n);
}while(n < 2);
int *a = (int *)calloc(n, sizeof(int));

printf("Enter the array:");


for(i = 0; i < n; i++)
scanf("%d", &a[i]);

max = 0;
for(i = 0; i < n; i++)
if(a[i] > a[max])
max = i;

secmax = 0;
for(i = 0; i < n; i++)
if(i != max && a[i] > a[secmax])
secmax = i;

printf("Largest Element = %d\n", a[max]);


printf("Second Largest Element = %d\n", a[secmax]);
free(a);
}

void Q2()
{
int i, n;
do {
printf("Enter an non-negative integer n:");
scanf("%d", &n);
}while(n <= 0);

int *a = (int *)calloc(n, sizeof(int));

printf("Enter the array:");


for(i = 0; i < n; i++)
scanf("%d", &a[i]);

int maxsum = a[0];


int curr_max = a[0];

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


{
curr_max = (a[i] > curr_max + a[i]) ? a[i] : curr_max + a[i];
maxsum = (maxsum > curr_max) ? maxsum : curr_max;
}
printf("%d\n", maxsum);
free(a);
}

void Q3()
{
int i, n, unique = 0;

do {
printf("Enter an odd integer n:");
scanf("%d", &n);
}while(n%2 == 0);

int *a = (int *)calloc(n, sizeof(int));


printf("Enter the array:");
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(i = 0; i < n; i++)
unique ^= a[i];
printf("Element appearing once = %d\n", unique);
free(a);
}

void reverseArray(int a[], int s, int e)


{
int i, j;
for(i = s, j = e; i < j; i++, j--) {
a[i] = a[i] ^ a[j];
a[j] = a[i] ^ a[j];
a[i] = a[i] ^ a[j];
}
}

void Q4()
{
int i, n, k;

do {
printf("Enter n:");
scanf("%d", &n);
}while(n <= 0);

do {
printf("Enter k <= n:");
scanf("%d", &k);
}while(n < k);

int *a = (int *)calloc(n, sizeof(int));

printf("Enter the array:");


for(i = 0; i < n; i++)
scanf("%d", &a[i]);

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


printf("%4d", a[i]);
printf("\n");

reverseArray(a, n-k, n-1);


reverseArray(a, 0, n-k-1);
reverseArray(a, 0, n-1);

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


printf("%4d", a[i]);
printf("\n");
free(a);
}

void Q5()
{
int i, n, j, count = 0;

do {
printf("Enter n:");
scanf("%d", &n);
}while(n <= 0);

int *a = (int *)calloc(n, sizeof(int));


int *b = (int *)calloc(n, sizeof(int));

printf("Enter the array:");


for(i = 0; i < n; i++)
scanf("%d", &a[i]);

for(i = 0, j = -1; i < n ; i++) {


if(j == -1)
b[++j] = a[i];
else if(a[i] == b[j])
b[++j] = a[i];
else
j--;
}

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


if(a[i] == b[j])
count++;
if(count > n/2)
printf("%d occurs %d times\n", b[j], count);
else
printf("No element occurs more than %d times\n", n/2);
free(b);
free(a);
}

void swap(int *a, int *b)


{
int temp;
temp = *a;
*a = *b;
*b = temp;
}

void Q6()
{
int i, j, n, leftflag, rightflag;

do {
printf("Enter n:");
scanf("%d", &n);
}while(n <= 0);

int *a = (int *)calloc(n, sizeof(int));

printf("Enter the array:");


for(i = 0; i < n; i++)
scanf("%d", &a[i]);

i = 0;
j = n-2;
leftflag = 0;
rightflag = 0;

while( i < j ) {

if(a[i] <= a[n-1])


i++;
else
leftflag = 1;

if(a[j] >= a[n-1])


j--;
else
rightflag = 1;

if(leftflag == 1 && rightflag == 1) {


swap(&a[i], &a[j]);
leftflag = 0;
rightflag = 0;
}
}

swap(&a[j+1], &a[n-1]);
printf("Rank of %d is %d\n", a[j+1], j+1);
free(a);
}

void Q7()
{
int i, j, len, flag = 0;
char str[100];
printf("Enter a string: ");
scanf(" %s", str);
len = strlen(str);
for(i = 0, j = len-1; i < j; i++, j--){
if(str[i] != str[j]) {
flag = 1;
printf("%s is not a palindrome\n", str);
break;
}
}
if(flag == 0)
printf("%s is a palindrome\n", str);
}

int substring(char str[], char pat[])


{
int i, j, n, m;
n = strlen(str);
m = strlen(pat);
for(i = 0; i < n-m+1; i++){
for(j = i; j < m+i-1; j++){
if(str[j] != pat[j-i]) {
break;
}
}
if(j == m+i-1)
return i;
}
return -1;
}

void Q8()
{
int flag;
char str[100], pat[100];
printf("Enter a string: ");
scanf(" %s", str);
printf("Enter a pattern: ");
scanf(" %s", pat);

flag = substring(str, pat);


if(flag == -1)
printf("%s is not a substring of %s\n", pat, str);
else
printf("%s is a substring of %s that starts at index %d\n", pat, str,
flag);
}

void Q9()
{
int flag;
char str[100], pat[100], strstrg[200];
printf("Enter a string: ");
scanf(" %s", str);
printf("Enter a pattern: ");
scanf(" %s", pat);
strcpy(strstrg, str);
strcat(strstrg, str);
flag = substring(strstrg, pat);
if(flag == -1 || strlen(str) != strlen(pat))
printf("%s can not be formed through right rotating of %s\n", pat, str);
else
printf("%s can be formed through right rotating of %s\n", pat, str);
}

void reverseString(char str[], int s, int e)


{
int i, j;
for(i = s, j = e; i < j; i++, j--) {
str[i] = str[i] ^ str[j];
str[j] = str[i] ^ str[j];
str[i] = str[i] ^ str[j];
}
}

void Q10()
{
int i, j, len;
char str[100];
fflush(stdin);
printf("Enter a string: ");
fgets(str, 99, stdin);

j = 0;
while(str[j] != '\0') {
if(str[j] == '\n')
str[j] = '\0';
j++;
}
len = strlen(str);
reverseString(str, 0, len-1);
i = 0; j = 0;
while(str[j] != '\0') {
if(str[j] == ' ' || str[j] == '\t') {
reverseString(str, i, j-1);
i = j;
while(str[i] == ' ' || str[i] == '\t')
i++;
j = i;
}
else
j++;
}
reverseString(str, i, j-1);
printf("%s\n", str);
}

int aToThePowerb(int a, int b)


{
int result = 1;
if(b == 0)
return 1;
if(b == 1)
return a;
result = aToThePowerb(a, b/2);
if(b%2 == 0)
return result * result;
else
return a * result * result;
}

void Q11()
{
int a, b;

do {
printf("Enter a positive integer a: ");
scanf("%d", &a);
} while(a <= 0);

do {
printf("Enter a non-negative integer b: ");
scanf("%d", &b);
} while(b < 0);

printf("%d to the power %d is %d\n", a, b, aToThePowerb(a, b));


}

int nCr(int n, int r)


{
if(r == n || r == 0)
return 1;
if(n > r)
return nCr(n-1, r) + nCr(n-1, r-1);
}

void Q12()
{
int n, r;

do {
printf("Enter a positive integer n: ");
scanf("%d", &n);
} while(n <= 0);

do {
printf("Enter a non-negative integer r: ");
scanf("%d", &r);
} while(r < 0);
printf("%dC%d = %d\n", n, r, nCr(n, r));
}

void TowerOfHanoi(int n, char a, char b, char c)


{
if(n > 0) {
TowerOfHanoi(n-1, a, c, b);
printf("Move %d from Peg %c to %c\n", n, a, b);
TowerOfHanoi(n-1, c, b, a);
}
}

void Q13()
{
int n;
do {
printf("Enter the number of disks n: ");
scanf("%d", &n);
} while(n <= 0);
TowerOfHanoi(n, 'A', 'B', 'C');
}

int Catalan(int n)
{
int i , j;
int *C = (int *)calloc(n+1, sizeof(int));
C[0] = 1;
C[1] = 1;
for(i = 2; i <= n; i++) {
for(j = 0; j < i; j++)
C[i] += C[j] * C[i - j - 1];
}
j = C[n];
free(C);
return j;
}

int recCatalan(int C[], int i, int n)


{
int j;
C[0] = 1;
C[1] = 1;
if(n == 0 || n == 1)
return 1;
else {
for(j = 0; j < i; j++)
C[i] += C[j] * C[i - j - 1];
if(i+1 <= n)
return recCatalan(C, i+1, n);
else
return C[n];
}
}

void Q14()
{
int n;
int i = 2;
do {
printf("Enter a non-negative integer n: ");
scanf("%d", &n);
} while(n < 0);
int *C = (int *)calloc(n+1, sizeof(int));
printf("%d-th Catalan Number = %d\n", n, Catalan(n));
printf("%d-th Catalan Number = %d\n", n, recCatalan(C, i, n));
free(C);
}

Вам также может понравиться