当前位置: 首页 > article >正文

c语言:解决数组有关的删除,排序,合并等问题。

题目1:判断数组是否有序(升序或者降序)


 

思路和代码:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a = 0;
    scanf("%d", &a);
    int arr[50];
    int flag1 = 0;//是降序
    int flag2 = 0;//是升序
    for (int i = 0; i < a; i++)
    {
        scanf("%d", &arr[i]);
        if (i > 0)
        {
            if (arr[i] >= arr[i - 1])//如果存在降序
            {
                flag1 = 1;//降序赋值为1
            }
            if (arr[i] < arr[i - 1])//如果存在升序
            {
                flag2 = 1;//升序赋值为1
            }
        }
    }
    if (flag1 + flag2 == 1)//满足升序或者降序其中一个就是有序数组
    {
        printf("sorted\n");
    }
    else//反之不是
    {
        printf("unsorted\n");
    }
}

题目2:去除数组中重复的数字 

思路和代码: 

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a = 0;
    scanf("%d", &a);
    int arr[1000];
    //读取
    for (int i = 0; i < a; i++)
    {
        scanf("%d", &arr[i]);
    }
    //去重
    for (int i = 0; i < a; i++)
    {
        int j = 0;
        for (j = i + 1; j < a; j++)//从下一个元素开始找
        {
            if (arr[i] == arr[j])//重复
            {
                //去重,后面元素往前覆盖
                int k = 0;
                for (k = j; k < a - 1; k++)
                {
                    arr[k] = arr[k + 1];//因为最大到a,所以k+1<a,k<a-1
                }
                a--;//数组个数减少一个
                j--;下标回退,重新判断后面有没有重复的
            }
        }
    }
    for (int i = 0; i < a; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;

}

题目3:合并,排序两个有序数组,并打印 

思路和代码: 

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int n = 0;
	int m = 0;
    //创建两个数组
	int arr1[100] = { 0 };
	int arr2[100] = { 0 };
	//传入两个数组的元素个数
	scanf("%d %d", &n, &m);
	int i = 0;
    //输入数组1
		for (i = 0; i < n; i++)
		{
			scanf("%d", &arr1[i]);
		}
    //输入数组2
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	//
	int j = 0;
	i = 0;
    //合并
	while (i < n && j < m)
	{
		if (arr1[i] < arr2[j])//哪个数组元素小先打印谁
		{
			printf("%d ", arr1[i]);
			i++;
		}
		else
		{
			printf("%d ", arr2[j]);
			j++;
		}
	}
	if (i == n)//相等都打印一次
	{
		for (; j < m; j++)
		{
			printf("%d ", arr2[j]);
		}
	}
	else
	{
		for (; i < n; i++)
		{
			printf("%d ", arr1[i]);
		}
	}
	return 0;
}


http://www.kler.cn/a/134640.html

相关文章:

  • 从python源码到可自动更新软件
  • 如何在手机上完整下载B站视频并保存到相册?
  • 如何保护 Microsoft 网络免受中间人攻击
  • Flink1.19编译并Standalone模式本地运行
  • 今日 AI 简报 | 开源 RAG 文本分块库、AI代理自动化软件开发框架、多模态统一生成框架、在线图像背景移除等
  • 免费,WPS Office教育考试专用版
  • 在Linux上安装RStudio工具并实现本地远程访问【内网穿透】
  • 四、hdfs文件系统基础操作-保姆级教程
  • learning项目总结
  • 后端技术知识点内容-全部内容-面试宝典-后端面试知识点
  • SBPL 打印机上传图片
  • 小程序如何添加打印机来打印订单
  • C进阶---文件操作
  • 根据音频绘制频谱
  • 基于像素特征的kmeas聚类的图像分割方案
  • 安全测试工具分为 SAST、DAST和IAST 您知道吗?
  • 【开源】基于Vue.js的智能教学资源库系统
  • GCC多平台编译会遇到小问题
  • Codewhisperer 使用评价
  • 机器学习技术栈—— 概率学基础
  • markdown 公式编辑
  • 用户运营:如何搭建用户分析体系
  • 三极管与mos管的区分与应用
  • RT-DETR优化改进:SEAM、MultiSEAM分割物与物相互遮挡、分割小目标性能
  • 零基础安装分布式数据服务注册系统
  • SpringCache