牛客网刷题

1.有序序列合并 

描述

输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。

输入描述:

输入包含三行,

第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数,用空格分隔。

第三行包含m个整数,用空格分隔。

输出描述:

输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。

示例1

输入:

5 6
1 3 7 9 22
2 8 10 17 33 44
输出:
1 2 3 7 8 9 10 17 22 33 44

思路:将两个数组中的数据存在另一个数组中,然后利用冒泡排序法进行排序。

#include 
int main()
{
	int m, n,i,j,temp;
	scanf("%d %d", &m, &n);
	int a[m], b[n];
    int x[m+n];
    for(i=0;ix[j+1])
            {
                temp=x[j];
                x[j]=x[j+1];
                x[j+1]=temp;
            }
        }
    }
    for(i=0;i

2.有序序列判断

描述

输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。

输入描述:

第一行输入一个整数N(3≤N≤50)。

第二行输入N个整数,用空格分隔N个整数。

输出描述:

输出为一行,如果序列有序输出sorted,否则输出unsorted。

示例1

输入:

5

1 6 9 22 30
输出:
sorted

示例2

输入:

5

3 4 7 2 10
输出:
unsorted

示例3

输入:

5

1 1 1 1 1
输出:
sorted

思路:将前一个数和后一个数做差,根据大于0或小于0的情况进行计数,如果计数的情况为n-1,那么就说明此序列两两相减的趋势相同,所以可对其进行是否有序的判断。

#include 
int main()
{
    int i,n,count1=0,count2=0;
    scanf("%d",&n);
    int x[n];
    for(i=0;i=0)
            count1++;
        else if(x[i]-x[i+1]<0)
            count2++;
    }

    if(count1==n-1||count2==n-1)
        printf("sorted");
    else
        printf("unsorted");
    return 0;

}

3.有序序列插入一个整数

描述

有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。

输入描述:

第一行输入一个整数N(0≤N≤50)。

第二行输入N个升序排列的整数,输入用空格分隔的N个整数。


第三行输入想要进行插入的一个整数。

输出描述:

输出为一行,N+1个有序排列的整数。

示例1

输入:

5

1 6 9 22 30

8
输出:
1 6 8 9 22 30

#include 
int main()
{
   int i,n,m;  //n数组元素数目 m插入的数字
   scanf("%d",&n);
   int x[n+1];
   for(i=0;ix[n-1]) printf("%d ",m); //m比数组中的任一个数都打,则执行这个if语句
 
   return 0;
}        

 4.序列中删除指定数字

描述

有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。

输入描述:

第一行输入一个整数(0≤N≤50)。

第二行输入N个整数,输入用空格分隔的N个整数。

第三行输入想要进行删除的一个整数。

输出描述:

输出为一行,删除指定数字之后的序列。

示例1

输入:

6
1 2 3 4 5 9

4
输出:
1 2 3 5 9

示例2

输入:

5

1 2 3 4 6 5
输出:
1 2 3 4 6

#include 
int main()
{
    int i,n;
    scanf("%d",&n);
    int x[n];
    for(i=0;i

 

你可能感兴趣的:(c语言)