牛客网刷题

简介: 牛客网刷题

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 <stdio.h>
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;i<m;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
        scanf("%d",&b[i]);
    }
    for(i=0;i<m;i++)
    {
      x[i]=a[i];            
    }
    j=0;
    for(i=m;i<m+n;i++)
    {
      x[i]=b[j];
      j++;
  }
    for(i=0;i<n+m-1;i++)
    {
        for(j=0;j<m+n-1-i;j++)
        {
            if(x[j]>x[j+1])
            {
                temp=x[j];
                x[j]=x[j+1];
                x[j+1]=temp;
            }
        }
    }
    for(i=0;i<m+n;i++)
    {
        printf("%d ",x[i]);
    }
    return 0;
}


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 <stdio.h>
int main()
{
    int i,n,count1=0,count2=0;
    scanf("%d",&n);
    int x[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&x[i]);
    }
    for(i=0;i<n-1;i++)
    {
        if(x[i]-x[i+1]>=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 <stdio.h>
int main()
{
   int i,n,m;  //n数组元素数目 m插入的数字
   scanf("%d",&n);
   int x[n+1];
   for(i=0;i<n;i++)
   {
      scanf("%d ",&x[i]);
   }
   int flag=1;  //判断是否插入条件
   scanf("%d",&m);
   for(i=0;i<n;i++)
   {
     if(m<x[i]&&flag==1)
     {
        printf("%d ",m) //完成插入
        flag=0;     //flag=0破坏if满足的条件,不再插入m
     }          //m比数组中的某一个数小,则执行这个if语句
     printf("%d ",x[i]);
   }
   if(m>x[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 <stdio.h>
int main()
{
    int i,n;
    scanf("%d",&n);
    int x[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&x[i]);
    }
    int m;
    scanf("%d",&m);
    for(i=0;i<n;i++)
    {
        if(x[i]!=m) //数组中的元素跟想要删除的数字相等就不打印
            printf("%d ",x[i]);
    }
    return 0;
}
相关文章
|
7月前
leetcode20刷题打卡
leetcode20刷题打卡
36 0
|
7月前
|
算法
leetcode202刷题打卡
leetcode202刷题打卡
33 0
|
7月前
刷题之Leetcode203题(超级详细)
刷题之Leetcode203题(超级详细)
37 0
刷题之Leetcode203题(超级详细)
|
7月前
|
Java
刷题之Leetcode24题(超级详细)
刷题之Leetcode24题(超级详细)
34 0
|
7月前
|
Java
刷题之Leetcode19题(超级详细)
刷题之Leetcode19题(超级详细)
47 0
|
7月前
|
存储 容器
leetcode349刷题打卡
leetcode349刷题打卡
40 0
|
7月前
leetcode206刷题打卡
leetcode206刷题打卡
29 0
|
7月前
|
索引
leetcode18刷题打卡
leetcode18刷题打卡
39 0
|
7月前
leetcode232刷题打卡
leetcode232刷题打卡
31 0