Write a program that reads an integer N, asks the user to enter N characters, calculate the length of the longest ascending sequence of characters and the position of its first character.
Example of execution:
Enter a positive integer: 11
Enter 11 characters without spaces:
AecDklnpacD
The longest sequence is of 5 characters, it begins at position 4
Difficulty level
Video recording
This exercise is mostly suitable for students
Solution provided by Dr. Rami El Baida using fflush(stdin) and reduced number of variables.
#include<stdio.h>
main()
{
int n,i,longseq,pos,poslong;
char c,old;
printf("Enter a positive integer: ");
scanf("%d",&n);
printf("Enter %d characters: ",n);
fflush(stdin);
c=getchar();
longseq=-1;
pos=1;
old=c;
for(i=2;i<=n;i++)
{
c=getchar();
if(c<old)
{
if(i-pos>longseq)
{
longseq=i-pos;
poslong=pos;
}
pos=i;
}
old=c;
}
printf("The longest sequence is of %d characters\n",longseq);
printf("It begins at the position %d\n",poslong);
}
#include<stdio.h>
#include<limits.h>
int main()
{
int N, i;
char c ,old;
int size_ls = INT_MIN, position_ls = -1;
int current_size, current_position;
do{
printf("Enter N: ");
scanf("%d\n",&N); // pay attention here
}while(N<1);
printf("Enter %d characters without spaces: ", N);
scanf("%c",&c);
current_position=1;
current_size=1;
old = c ;
for(i=2;i<=N;i++)
{
scanf("%c",&c);
if(c<old)
{
if(current_size > size_ls)
{
size_ls = current_size ;
position_ls = current_position;
}
current_position=i;
current_size=1;
}
else
{
current_size++;
}
old=c;
}
if(current_size > size_ls)
{
size_ls = current_size ;
position_ls = current_position;
}
printf("The longest sequence is of %d characters, it begins at position %d.\n",size_ls,position_ls);
return 0;
}
Back to the list of exercises
Looking for a more challenging exercise, try this one !!
Sorting using the radix sort algorithm