广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言一维数组算法问题的示例分析
  • 250
分享到

C语言一维数组算法问题的示例分析

2023-06-25 15:06:45 250人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关C语言一维数组算法问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题1:将数组中的数逆序存放本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放, 再按

这篇文章给大家分享的是有关C语言一维数组算法问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

问题1:将数组中的数逆序存放

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放, 再按顺序输出数组中的元素。

算法描述:1.向数组a中输入元素;

定义一个新数组new,将数组a中的元素倒序存放;

将数组b正序输出,注意结尾无空格的格式问题。

代码实现 : 

#include <stdio.h>int main(){    int n;    scanf("%d",&n);    int i,arr[n];    for(i = 0;i < n;i++)    {        scanf("%d",&arr[i]);    }        int new[n],j;//定义一个数组new用来存入数组a的逆顺序    for(int j = 0;j < n;j++)    {        new[j] = arr[n-1-i];//倒序存入    }    for(int k = 0;k < n - 1;k++)//数组中最后一个元素不一起输入,保持结尾无空格    {        printf("%d ",new[k]);    }    printf("%d",new[n-1]);//输出最后一个元素    return 0;}

运行结果:

C语言一维数组算法问题的示例分析

问题2:求数组中最大值及其下标

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。 输入格式: 输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。 输出格式: 在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

算法描述:1.向数组中存放元素;

把数组中第一个元素先定义一个变量保存住;

遍历数组,如果比保存第一个元素的变量大,那就赋值给那个变量,直到变量值变为最大;

定义一个变量用来记录最大值的下标。

代码实现:

#include <stdio.h>int main(){    int n;    scanf("%d",&n);    int arr[n],i;    for(i = 0;i < n;i++)    {        scanf("%d",&arr[i]);    }        int max = arr[0];               //定义一个变量保存数组第一个元素    for(int j = 1;j < n;j++)    {        if(max < arr[j])            //如果小于就一直给m,直到找到最大值停        {            max = arr[j];               }     }    for(int num = 0;num < n;num++)  //记录最大值下标操作    {        if(arr[num] == max)        {            printf("最大值为:%d\n其下标为:%d",max,num);            break;        }    }    return 0;}

运行结果:

C语言一维数组算法问题的示例分析

问题3:找出不是两个数组的共有元素

本题要求给定两个整型数组,本题要求找出不是两者共有的元素。

算法描述:1.分别定义两数组并输入值;

用数组a中元素对比数组b中元素,非共有值放入c中(此处可以用一个 标志变量flag,标志 是否有共有值);

用数组b中元素对比数组a中元素,重复“2”操作;

最后先输出数组c中第一个元素,然后判断元素是否与之前录入元素

重复。

最后打印出来数组c中的元素,也就是非共有值,此处注意格式问题。

代码实现:

#include <stdio.h>int main(){    int n;                          scanf("%d",&n);    int arr1[n],i;                      //定义第一个数组    for(i = 0;i < n;i++)    {        scanf("%d",&arr1[i]);    }        int m;    scanf("%d",&m);    int arr2[m],j;                      //定义第二个数组    for(j = 0;j < m;j++)    {        scanf("%d",&arr2[j]);    }        int k,rem[20] = {};                 //数组rem是用来记录非公有值的    for(i = 0;i < n;i++)    {        int flag = 0;                   //定义标志变量用来标志是否有非共有值        for(j = 0;j < m;j++)                {            if(arr1[i] == arr2[j])  //用数组1中元素对比数组2中元素,非共有值放入数组rem中            {                flag = 1;            }        }        if(flag == 0)        {            rem[k] = arr1[i];            k++;        }    }        for(i = 0;i < m;i++)        //用数组2中元素对比数组1中元素,非共有值放入数组rem中    {        int flag = 0;        for(j = 0;j < n;j++)        {            if(arr2[i] == arr1[j])            {                flag = 1;            }        }        if(flag == 0)        {            rem[k] = arr2[i];            k++;        }    }        printf("非共有元素:%d",rem[0]);      //输出rem中第一个元素    for(i = 1;i < k;i++)    {        for(j = 0;j < i;j++)        {            if(rem[i] == rem[j])            {                break;            }        }        if(j >= i)        {            printf(" %d",rem[i]);   //因为提前输出第一个元素,所以后面要打一个空格再打元素,                                                                                                                             //结尾无空格的格式问题        }    }    return 0;}

运行结果:

C语言一维数组算法问题的示例分析

问题4:找出出现次数最多的数

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式: 输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式: 在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的

算法描述:1.定义两个数组,一个用来存放元素,另一个用来当计数器,此数组注意需 要初始化;

在这个数组中找到重复的,然后把计数器数组赋值+1;

一直遍历找到重复最多的,找到后把计数器数组元素赋值给变量max(也 就是出现次 数),计数器数组下标就是出现次数最多数的下标。

代码实现:

#include <stdio.h>int main(){    int n,arr[1000],cnt[1000] = {0};        //cnt为计数器数组,需要初始化    int i,j,k,max = 0;    scanf("%d",&n);    for(i = 0;i < n;i++)    {        scanf("%d",&arr[i]);    }        for(i = 0;i < n;i++)    {        for(j = 0;j < n;j++)        {            if(arr[i] == arr[j])        //找到一样的            {                cnt[i] = cnt[i] + 1;    //cnt[i]++            }        }    }        for(i = 0;i < n;i++)    {        if(max < cnt[i])            //一直遍历直到找重复最多的        {            max = cnt[i];           //找到后赋值给max            k = i;              //i就是重复最多的数的下标        }    }        printf("出现次数最多的数字为:%d\n其出现次数为:%d",arr[k],max);          return 0;}

运行结果:

C语言一维数组算法问题的示例分析

问题5:数组中插入数字并排序

本题要求给出n个元素的数组,从小到大排列,再输入一个num,插入到数组中, 使得新数组依旧是从小到大的顺序(用一个数组完成)。

算法描述:1.定义一个数组并存放元素,单独记录好倒数第二个元素;

输入要插入的数字,注意可以考虑特殊情况,如果插入的数大于原本倒数 第二个数,就可以 直接插入赋值为最后一个元素;

再来考虑一般情况,遍历数组,如果原本的数大于要插入的数,先保存住 原来的数字,然 后把插入的数放入到原来的数的位置;

插入之后,原本的数就到了后一位,需要把后一位的位置保存住,把原本 的数放到后一 位,再把位置赋上原本数的值;

最后遍历输出数组元素 。

代码实现 :

#include <stdio.h>int main(){    int n,i,j;    scanf("%d",&n);    int arr[n],t1,t2,num,end;    for(i = 0;i < n;i++)    {        scanf("%d",&arr[i]);    }    scanf("%d",&num);           //输入要插入的数字    end = arr[n-1];             //保存倒数第二个元素        if(num > end)               //考虑特殊情况,如果插入的数大于倒数第二个     {        arr[n] = num;           //直接插入赋值    }    else    {        for(i = 0;i < n;i++)        {            if(arr[i] > num)    //如果原本的数大于插入的数            {                t1 = arr[i];    //先保存原来的数                arr[i] = num;   //把插入的数放到原来数的位置                for(j = i + 1;j <= n;j++)       //处理原来的数                {                    t2 = arr[j];            //原来的数到了后一位保存住                    arr[j] = t1;            //把原来的数赋值给现在要存的这个位置上                    t1 = t2;                }                break;            }        }    }    for(i = 0;i <= n;i++)               //注意这里i<=n,因为多插入了一个数字    {        printf("%d ",arr[i]);    }    return 0;}

运行结果:

C语言一维数组算法问题的示例分析

 C语言一维数组算法问题的示例分析

问题6:数组循环右移问题

一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯*AN−1)变换为(ANMAN−1A0A1⋯ANM−1)(最后M个数循环移至最前面的M*个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

输出格式:

在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格

输入样例:

6 2 1 2 3 4 5 6

结尾无空行

输出样例:

5 6 1 2 3 4

结尾无空行

算法描述:1.定义数组并存入元素,输入要移动的值;

注意先处理一下移动的值,让他和数组中元素的总个数取个余;

优先考虑特殊情况:如果移动的值为0,那直接打印;

移动k个,先把最后k个值放到前面,做特殊处理,方便剩余的元素打印;

然后再注意格式问题,打印出除最后一个以外的数字+空格,最后在打印 最后一个数。

代码实现:

#include <stdio.h>int main(){    int n,move;    scanf("%d %d",&n,&move);    int arr[n],i;    for(i = 0;i < n;i++)    {        scanf("%d",&arr[i]);    }        move %= n;              //取余算出到底移动多少,进行简化        if(move == 0)               //特殊情况特殊处理    {        for(i = 0;i < n - 1;i++)        {            printf("%d",arr[i]);        //注意格式问题        }        printf("%d",arr[n-1]);                return 0;    }        for(i = n - move;i < n;i++)     //移动move,把最后move个数放前面    {        printf("%d ",arr[i]);    }    for(i = 0;i < n - move - 1;i++) //把剩下除了最后一个数,打印出来    {        printf("%d ",arr[i]);    }    printf("%d",arr[n-1-move]);         //最后一个没空格        return 0;}

运行结果:

C语言一维数组算法问题的示例分析

感谢各位的阅读!关于“C语言一维数组算法问题的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: C语言一维数组算法问题的示例分析

本文链接: https://www.lsjlt.com/news/305682.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言一维数组算法问题的示例分析
    这篇文章给大家分享的是有关C语言一维数组算法问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题1:将数组中的数逆序存放本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放, 再按...
    99+
    2023-06-25
  • 关于C语言一维数组算法问题详解
    目录问题1:将数组中的数逆序存放问题2:求数组中最大值及其下标问题3:找出不是两个数组的共有元素问题4:找出出现次数最多的数问题5:数组中插入数字并排序问题6:数组循环右移问题总结问...
    99+
    2022-11-12
  • C语言中数组的示例分析
    这篇文章给大家分享的是有关C语言中数组的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 数组数组是一组相同类型变量的有序集合,用于存放一组相同类型的数据。这一组变量用数组名和从0开始的下标标识,使用内...
    99+
    2023-06-29
  • C语言中main()函数参数问题的示例分析
    这篇文章主要介绍了C语言中main()函数参数问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。#include<stdio.h>void m...
    99+
    2023-06-29
  • c语言中缓冲区问题的示例分析
    这篇文章主要介绍了c语言中缓冲区问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。发现问题你是不是总会出现当你输入的时候(你想的是只输出一个内容),但是最后却输入两...
    99+
    2023-06-25
  • C语言算法练习之求二维数组最值问题
    目录一、问题描述二、算法实例编译环境三、算法实例实现过程3.1、包含头文件3.2、定义宏和声明数组3.3、声明相关变量3.4、输入数组(方阵)的阶3.5、输出 “输入的数...
    99+
    2022-11-13
  • C#算法面试题的示例分析
    这篇文章主要为大家展示了“C#算法面试题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#算法面试题的示例分析”这篇文章吧。C#算法一道面试题:程序设计: 猫大叫一声,所有的老鼠都开始...
    99+
    2023-06-18
  • C语言算法积累分离数位示例
    题目:输出一个三位整数的个、十、百位数。 关键字:得到数位 思路: Q:如何利用简单的基本运算来得到一个数字的各个数位上的数字? A:利用除法和求余运算:以153为例 首先,百位最容...
    99+
    2022-11-13
  • C/C++经典算法之约瑟夫问题的示例分析
    这篇文章给大家分享的是有关C/C++经典算法之约瑟夫问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是约瑟夫问题? 约瑟夫问题:n个人围成一圈,初始编号从1~n排列,从约定编号为x的人开...
    99+
    2023-06-20
  • C语言的dp算法LeetCode炒股习题案例分析
    本文小编为大家详细介绍“C语言的dp算法LeetCode炒股习题案例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言的dp算法LeetCode炒股习题案例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-06-29
  • C语言中数组作为函数参数的示例分析
    这篇文章主要介绍了C语言中数组作为函数参数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数组作为函数参数1 冒泡排序函数的错误设计...
    99+
    2022-10-19
  • c语言中移位运算符的示例分析
    这篇文章主要介绍c语言中移位运算符的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储...
    99+
    2023-06-15
  • C语言面试C++二维数组中的查找示例
    目录二维数组中的查找面试题3:暴力遍历动态基点操作二维数组中的查找 面试题3: 似题: 我做过这个类似的有杨氏矩阵为背景的,实际上是一样的 暴力遍历 二维数组暴力遍历的话时间复杂度...
    99+
    2022-11-12
  • C语言中库函数的示例分析
    这篇文章主要为大家展示了“C语言中库函数的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中库函数的示例分析”这篇文章吧。1 返回整数的getchar函数代码:#include<...
    99+
    2023-06-29
  • C语言中函数递归的示例分析
    这篇文章主要介绍C语言中函数递归的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是递归?递归(recursion):程序调用自身的一种编程技巧。如何理解函数递归:从调用自身层面:函数递归就是函数自己调用自...
    99+
    2023-06-29
  • C语言中数据存储的示例分析
    这篇文章主要介绍了C语言中数据存储的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(壹)大端小端藏端倪1.1  什么是大端小端大端(存储)模式,是指数据的低...
    99+
    2023-06-29
  • C语言中数据类型的示例分析
    这篇文章将为大家详细讲解有关C语言中数据类型的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。(壹) 数据类型介绍前面我们已经学习了基本的内置类型,以及他们所占存储空间的大小。:类型的意义...
    99+
    2023-06-29
  • C语言最大公约数的示例分析
    今天就跟大家聊聊有关C语言最大公约数的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。穷举法(1) i= a ,b中较小的数(2)若a,b能同时被i整除,则i即为最大...
    99+
    2023-06-21
  • C语言中实现朴素模式匹配算法的示例分析
    这篇文章给大家分享的是有关C语言中实现朴素模式匹配算法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是字符串的模式匹配?字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。注意:①...
    99+
    2023-06-15
  • KnockoutJS数组比较算法的示例分析
    这篇文章给大家分享的是有关KnockoutJS数组比较算法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这篇文章主要介绍了KnockoutJS数组比较算法实例详解,文中...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作