巧用二维数组进行编号排序以及创建新数组排序编号和一个杨辉三角的实现

简介: 巧用二维数组进行编号排序以及创建新数组排序编号和一个杨辉三角的实现

一、对数组 A 中的N( 0 <N<100)个整数从小到大进行连续编

     号,输出各个元素的编号。要求不能改变数组A中元素的

     顺序,且相同的整数要具有相同的编号。

      例如:数组是: A=(5,3,4,7,3,5,6)

     则输出为:(3,1,2,5,1,3,4)

这里我们可以巧妙运用二维数组,用其第一行储存元素,第二行储存编号,到时候打印出来即可!

下面展示一下我的代码,仅供参考!!!

#include <stdio.h>
main()
{
    int i, j, k, n, m = 1, r = 1, a[2][100] = { 0 };
    printf("Please enter n:");       //确定数组大小
    scanf("%d", &n);
    for (i = 0; i < n; i++)          //输入数据
    {
        printf("a[%d]= ", i);
        scanf("%d", &a[0][i]);
    }
    
    while (m <= n)           // 限定循环条件,用m来统计已编过号的数组元素
    {
        for (i = 0; i < n; i++)
        {
            if (a[1][i] == 0)          //这里进行挑选没有编过号的元素
            {
                break;           //挑选到则跳出循环
            }
        }
        k = i;        //用k来暂时储存i,便于后面进行比较
        for (j = i; j < n; j++)
        {
            if (a[1][j] == 0 && a[0][j] < a[0][k])   //判断此次循环是否存在比a[0][i]小的元素
            {
                k = j;         //如果存在则令k=j以便后续对这个元素进行编号
            }
        }
            a[1][k] = r++;     //此处进行编号
        
        m++;          //编一次号m加1一次
        for (j = 0; j < n; j++)       //这里的循环用于判断是否有相等的元素
        {
            if (a[1][j] == 0 && a[0][j] == a[0][k])
            {
                a[1][j] = a[1][k];    //如果存在相等的元素则令其编号相等
                m++;             //因为存在相等m在进行加1减少循环次数
            }
        }
    }
    for (i = 0; i < n; i++)
        printf("\na[%d]=%3d  其编号为%d\n", i, a[0][i], a[1][i]);
}

具体思路;首先我们创建一个二维数组,行为2,至于列我们就取个100好了,到最后我们取定数组长度不要超过100就好了,然后我们输入数据,再进行选出没有编号(注意如果数组中没有输入值进去时数组默认储存一个0进去,所以没有编号过的元素其对应的第二行数组元素便为0)元素进行比较,如果有比它小的元素就对该元素编号,如果没有便对它自己进行编号,比如上面图中的a[0][0]下方的比编号即a[1][0]的值为0则对其进行比较其他队员下方编号也为0的元素,编号的具体过程参考上面的代码!下面进入第二个阶段!


二、求一个二维数组中每行的最大值和每行的和。

#include <stdio.h>
main()
{
    int a[5][5], b[5], c[5], i, j, k, s = 0;  //创建一个b[5]来储存最大值,c[5]来储存每行的和
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            a[i][j] = rand(1) %50+10;     //这里随机储存数字,由rand实现
        }
    }
 
    for (i = 0; i < 5; i++)
    {
        k = a[i][0];      // 这里取每行的第一个元素进行开始比较
        s=0;              //这里用于初始化s的值
        for (j = 0; j < 5; j++)       //进行比较
        {
            if (k < a[i][j])
            {
                k = a[i][j];
            }
            s = s + a[i][j];   //将每行的元素相加用s暂时储存
        }
        b[i] = k;             //找到最大值依次放入b[5]中
       
        c[i]=s;              // 最终将s储存进c[5]中
    }
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
           
        {
            printf("%2d   ", a[i][j]);
        }
        printf("其最大值为:%d  这一行元素的和为:%5d\n", b[i], c[i]);
        printf("\n");
    }
}

大家可以看一下运行结果: 具体思路:我们照常创建一个二维数组,然后我们再创建一个b[ ]数组和c[ ]数组,这里我们测试选择数据小一点,就创建一个a[5][5]和b[5]及c[5],代码中也详细解释了b[5]用来储存每行的最大值,c[5]用来储存每行的元素和!最后参考代码进行运算即可!!!


三、杨辉三角形
       杨辉三角是将若干数字按照一定规律排列成三角形的数表,每一行最外侧的数字都是1,中间的数字等于它肩膀上的两数之和。杨辉三角每一行的数刚好对应二项式展开后的
系数,实际上是一张二项式系数表。杨辉三角在1261年杨辉所著的《详解九章算法》已经出现,最初被称为“开方作法本源图”,后人简称为“杨辉三角”。杨辉三角有许多重要的性质,在数列求和等方面具有重要应用。

#include  <stdio.h>
#define N 10
main()
{
    static int a[N][N];
    int i, j, k;
    /***********FOUND***********/
    for (i = 0; i < N; i++)
    {
        /***********FOUND***********/
        for (k = 0; k < 3*N - 3* i; k++)
            printf(" ");
        for (j = 0; j <= i; j++)
        {
            if (j == 0 || j == i)
                a[i][j] = 1;
            else
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
            printf(" ");
            printf("%-5d", a[i][j]);
        }
        printf("\n");
    }
}
 

看了上面代码相信各位也会怎么敲了,需要注意的是当行数N变大时需要修改一下距离,不然很可能会是数据很集中不美观!


今天到此结束,期待各位的观看和支持。您的支持是我更新的动力!!!

 

目录
相关文章
|
25天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
17天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
4天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
1天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
257 12
|
19天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
21天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2582 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
3天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
169 2
|
1天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
101 65
|
21天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1578 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
5天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
257 2