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

E45.【C语言】练习:输入10个整数查找找并打印不相同的数字及个数

1.题目

输入10个整数查找找并打印不相同的数字及个数

输入示例
 

数组元素个数:10
20 50 30 10 60 90 70 30 10 20

输出示例

20 50 30 10 60 90 70 
一共7个  

2.初始代码

和E27.【C语言】练习:在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字文章有点不一样

三重循环

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int arr[1000] = { 0 };
    int num = 0;
    printf("数组元素个数:");
    scanf("%d", &num);
    for (int i = 0; i < num; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 0; i < num; i++)
    {
        for (int j = i + 1; j < num; j++)
            if (arr[i] == arr[j])
            {
                for (int k = j; k < num; k++)
                {
                    arr[k] = arr[k + 1];
                }
                num--;
            }
    }
    for (int i = 0; i < num; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n一共%d个", num);
    return 0;
}

运行结果

3.封装为函数

其实画圈处可以封装为一个自定义函数move

            if (arr[i] == arr[j])
            {
               move(......);
            }

写法1:传arr

改变数组组元素(int)要传数字元素的地址(int*),因此可以传arr

            if (arr[i] == arr[j])
            {
               move(arr,j,num);
            }
void move(int* arr,int begin,int end)
{
    for (int i = beign; i < end; i++)
    {
        arr[k] = arr[k+1];
    }
}

写法2:传&arr[j]

取下标为j元素的地址&arr[j]

            if (arr[i] == arr[j])
            {
               move(&arr[j],num-j,&num);
            }
void (int* arr,int n,int* num)
{
    while (n--)
    {
        *arr=*(arr+1);
        arr++;
    }
    (*num)--;
}

4.代码查错

运行结果看起来好像没问题

但下方输出结果错误

10 20 10 20 20-->10 20 20 20-->10 20 20

发现20没有完全删除 添加if (arr[j]==arr[j-1])判断即可

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int arr[1000] = { 0 };
    int num = 0;
    printf("数组元素个数:");
    scanf("%d", &num);
    for (int i = 0; i < num; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 0; i < num; i++)
    {
        for (int j = i + 1; j < num; j++)
        {
            if (arr[i] == arr[j])
            {
                for (int k = j; k < num; k++)
                {
                    arr[k] = arr[k + 1];
                }
                num--;
            }
            if (arr[j]==arr[j-1])
            {
            	j--;
            	for (int k = j; k < num; k++)
                {
                    arr[k] = arr[k + 1];
                }
                num--;
			}
            
        }
    }
    for (int i = 0; i < num; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n一共%d个", num);
    return 0;
}

 运行结果


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

相关文章:

  • 【概率统计通俗版】极大似然估计
  • 2024年11月19日Github流行趋势
  • 【大模型】prompt实践总结
  • MySQL数据库3——函数与约束
  • 基于Java Springboot网上花卉购物系统
  • SSD固态硬盘删除文件基本无法恢复
  • 测试杂文 - linux串口打印
  • Rust宏系列教程—自定义派生宏
  • uniapp开发的陪玩系统该如何实现后端PHP语言的书写?
  • Android集成FCM(Firebace Cloud Messaging )
  • 9.《滑动窗口篇》---①长度最小的子数组(中等)
  • Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
  • SpringBoot 2.2.10 无法执行Test单元测试
  • Excel数据动态获取与映射
  • MySQL SELECT 语句执行链路解析
  • C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
  • 24.UE5枚举,怪物分类,龙卷风技能
  • LLaMA与ChatGLM选用比较
  • 无插件H5播放器EasyPlayer.js RTSP播放器chrome/edge等浏览器如何使用独立显卡
  • 构建安全护盾:HarmonyOS 应用的数据安全审计与日志管理实战
  • 自动驾驶系列—告别眩光烦恼:智能大灯如何守护夜间行车安全
  • Linux(命令行扩展+命令行历史 大白话+图片)
  • 查询我正在学习的课程
  • C++:指针和引用
  • 速盾:cdn影响获取ip吗?
  • 21-JavaScript 解构赋值简介