C语言的攻克之路

简介: C语言的攻克之路

前言

今天和大家分享牛客网刷题的几道题目

题目

1 序列中删除指定数

最初的想法:是想在序列中先找到要替换的数,将这个数删除,但我很快发现自己无法将这个数删除。(有知道怎么删除的小伙伴可以告诉我噢!)。

解题思路:1 将删除数排除在序列之外。

                 2 在将这个序列后面的数前移。

                 3 打印这个新的序列。

代码

#include<stdio.h>
 
int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[50]={0};
    int i = 0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    //输入删除数
    int del = 0;
    scanf("%d",&del);
    int j = 0;
    for(i=0;i<n;i++)
    {
        if(arr[i]!=del)
        {
            arr[j++]=arr[i];
        }
    }
    //打印
    for(i=0;i<j;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}

2序列中整数去重

       

解题思路:1 找到相同的元素

                  2 如果元素数相同,便将后续元素向前移动

代码:

#include<stdio.h>
 
int main()
{
    int n = 0;
    scanf("%d", &n);
    //数据输入
    int arr[1000] = { 0 };
    int i = 0;
    for (i = 0;i < n;i++)
    {
        scanf("%d", &arr[i]);
    }
    for (i = 0;i < n;i++)
    {
        int j = 0;
        for (j = i + 1;j < n;j++)
        {
            //先找到相同元素
            //如果相同,就将后续元素先前移动
            if (arr[i] == arr[j])
            {
                int m = 0;
                for (m = j;m < n - 1;m++)
                {
                    arr[m] = arr[m + 1];
                }
                n--;//表示已经去掉一个相同的数
                j--;//继续判断下个是否要是重数
 
            }
        }
    }
    for (i = 0;i < n;i++)
    {
        printf("%d ", arr[i]);
    }
 
    return 0;
}

3有序序列合并

解题思路:1 建立三个数组arr1和arr2及arr3让下标分别为i和j及k(初始值都为0)。

                 2 让arr1[i]和arr2[j]比较,让较小的数存入arr3中在让i++或者j++,后继续比较。

                 3 当arr1或者arr2中的元素都存完后在将没存完的数组继续存入arr3中。

代码:

#include<stdio.h>
 
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    int arr1[1000] = { 0 };
    int arr2[1000] = { 0 };
    int arr3[2000] = { 0 };
    //数据输入
    int i = 0;
    for (i = 0;i < n;i++)
    {
        scanf("%d", &arr1[i]);
    }
    for (i = 0;i < m;i++)
    {
        scanf("%d", &arr2[i]);
    }
    //处理
    int j = 0;
    int k = 0;
    i = 0;
    while (i < n && j < m)
    {
        //将一个较小的数放到合并的数组中
        if (arr1[i] < arr2[j])
        {
            arr3[k++] = arr1[i++];
        }
        else
        {
            arr3[k++] = arr2[j++];
        }
    }
    //当arr1数组元素先存完
    //将arr2中剩余的数自己放入arr3中
    if (i == n)
    {
        for (;j < m;j++)
        {
            arr3[k++] = arr2[j];
        }
    }
    else
    {
        for (;i < n;i++)
        {
            arr3[k++] = arr1[i];
        }
    }
    //打印arr3
    for (i = 0;i < k;i++)
    {
        printf("%d ", arr3[i]);
    }
    return 0;
}

结束语

今天分享到这里,希望小伙伴们能多多指点我,大家一起加油,一起进步!

 


相关文章
|
9月前
|
存储 编译器 C语言
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它4
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它4
|
9月前
|
编译器 C语言
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它3
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它3
|
9月前
|
存储 C语言
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它1
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它1
|
9月前
|
C语言
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它2
【C语言】 指针篇,不会的一定要看,指针没有想象的那么难,我们一起攻克它2
|
3天前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
2天前
|
C语言
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
17 0
|
2天前
|
C语言
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
4 0
|
2天前
|
C语言
C语言——函数递归
C语言——函数递归
4 0
|
2天前
|
C语言
C语言—函数(大化小方式的心脏)
C语言—函数(大化小方式的心脏)
2 0
|
3天前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
15 2