YTU 二维数组

一.杨辉三角

题目描述

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。

输入

一个正整数 n (1≤n≤30),表示将要输出的杨辉三角的层数。

输出

输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开。

输入输出样例

样例输入 #1

复制

4
样例输出 #1

复制

1
1 1
1 2 1
1 3 3 1

代码: 

#include <stdio.h>
int main()
{

    int n;
    scanf("%d",&n);
    int a[n][n];
    a[0][0]=1;
    if(n>=2)
    {
        a[1][1]=1;
        a[1][2]=1;
    }
    int count=0;
    for(int ii=0; ii<n; ii++)
    {
        count++;
        for(int i=0; i<n; i++)
        {
            if(ii==0) a[i][ii]=1;
            else if(i==count-1) a[i][ii]=1;
            else
                a[i][ii]=a[i-1][ii]+a[i-1][ii-1];
        }

    }
    int tmp=0;

    for(int j=0;j<n;j++)
    {
        tmp++;
        for(int jj=0;jj<n;jj++)
        {
            if(jj<=tmp-1) printf("%d ",a[j][jj]);
        }
        printf("\n");
    }



    return 0;

}


 

二.求3×3矩阵对角线元素之和

题目描述

求一个3×3矩阵对角线元素之和。

输入

矩阵

输出

主对角线 副对角线 元素和

输入输出样例

样例输入 #1

复制

1 2 3
1 1 1
3 2 1
样例输出 #1

复制

3 7

代码 

#include <stdio.h>
int main()
{
    int a[3][3];
    for(int i=0;i<3;i++)
    {
        for(int ii=0;ii<3;ii++)
        {
            scanf("%d",&a[i][ii]);
        }

    }
    printf("%d %d",a[0][0]+a[1][1]+a[2][2],a[0][2]+a[1][1]+a[2][0]);
    return 0;
}

三.矩阵下三角元素之和

题目描述

输入一个正整数 n (1≤n≤10), 再输入 n×n 的矩阵,要求该矩阵的下三角元素之和。

输入

输入包括 n+1 行 第一行为整数 n 接下来的 n 行为矩阵数据

输出

矩阵的下三角元素之和

输入输出样例

样例输入 #1

复制

5
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
样例输出 #1

复制

75

代码 

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[n][n];
    int sum=0,count=0;
    for(int i=0; i<n; i++)
    {
        count++;
        for(int ii=0; ii<n; ii++)
        {
            scanf("%d",&a[i][ii]);
            if(ii<=count-1)
                sum+=a[i][ii];
        }
    }

    printf("%d",sum);

    return 0;
}

四.求二维数组中的鞍点

题目描述

如果矩阵 A 中存在这样的一个元素 Aij​ 满足条件 Aij是第 i 行中值最小的元素,且又是第 j 列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出 m×n 的矩阵 A的马鞍点。

输入

输入 m,n

然后输入数组中的每个元素。

输出

输出 m×n的矩阵 A 的所有马鞍点。题目保证每组数据中的马鞍点存在且唯一。

输入输出样例

样例输入 #1

复制

3 3
1  7  3
5  4  6
17 18 9
样例输出 #1

复制

9

代码 

#include <stdio.h>
int main()
{
    int m,n;
    scanf("%d%d",&m,&n);
    int a[m][n];
    for(int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }

    int lie,ii,hang1,hang2;
    for(int i=0; i<m; i++)
    {
        int minh=a[i][0];
        for(ii=0; ii<n; ii++)
        {
            if(a[i][ii]<=minh)
            {
                minh=a[i][ii];
                hang1=i;
                lie=ii;
            }

        }
        int maxl=a[0][lie];
        for(int j=0;j<m;j++)
        {
            if(a[j][lie]>=maxl)
            {
                maxl=a[j][lie];
                hang2=j;
            }
        }
        if(hang1==hang2)
            printf("%d",minh);


    }

    return 0;
}

五.打印回型嵌套

题目描述

***********
*         *
* ******* *
* *     * *
* * *** * *
* * * * * *
* * *** * *
* *     * *
* ******* *
*         *
***********

观察这个图形,它是由一系列正方形的星号方框嵌套而成。

在上边的例子中,最外方框的边长为 11。

本题的任务就是从标准输入获得一个整数 n (1<n<100),程序则生成嵌套着的回字型星号方框,其最外层方框的边长为 n。

输入输出样例

样例输入 #1

复制

10
样例输出 #1

复制

**********
*        *
* ****** *
* *    * *
* * ** * *
* * ** * *
* *    * *
* ****** *
*        *
**********

提示

例如:输入 555,程序输出:

*****
*   *
* * *
*   *
*****

代码 

#include <stdio.h>
//1=*;0=空格 ;
int main()
{
    int n;
    scanf("%d",&n);
    int a[100][100]= {0};
    int tmp=n-1,s=0,i;
    while (tmp-s>=0)
    {
        for(i=s; i<=tmp; i++)
        {
            a[s][i]=1;
            a[i][s]=1;
            a[tmp][i]=1;
            a[i][tmp]=1;
        }
        s=s+2;
        tmp=tmp-2;

    }


    for(int i=0; i<n; i++)
    {
        for(int ii=0; ii<n; ii++)
        {
            if(a[i][ii]==0) printf(" ");
            else printf("*");
        }
        printf("\n");
    }


    return 0;
}

六.海选女主角

题目描述

potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。 “做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...”potato老师很是无奈。 “张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。 嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。 说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out! 由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪... 面试那天,刚好来了m*n个MM,站成一个m*n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。 一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。 分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值最大的MM。 特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。

提示:绝对值函数fabs()在使用使要添加math.h函数库

输入

输入数据有多组,每组的第一行是两个整数m和n(1<=m,n<=100),表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和 n的定义见题目的描述。

输出

对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。 note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。

输入输出样例

样例输入 #1

复制

2 3
1 4 -3
-7 3 0
样例输出 #1

复制

2 1 -7

代码 

#include <stdio.h>
#include <math.h>
int main()
{
    int m,n;
    scanf("%d%d",&m,&n);
    int a[m][n];
    for(int i=0; i<m; i++)
    {
        for(int ii=0; ii<n; ii++)
        {
            scanf("%d",&a[i][ii]);
        }
    }
    int max=0,hang,lie;
    for(int i=0; i<m; i++)
    {
        for(int ii=0; ii<n; ii++)
        {
            if(max<fabs(a[i][ii]))
            {
                max=fabs(a[i][ii]);
                hang=i;
                lie=ii;
            }
        }
    }
    printf("%d %d %d",hang+1,lie+1,a[hang][lie]);

    return 0;
}

七.软件工程

题目描述

Merlin 的软件工程老师 Max 布置了开发一个软件的大作业。由于这是一个大型软件,所以单靠 Merlin 一个人不可能在预定时间内做完,必须与其他人合作。

由于大家都要做这个作业,所以 Merlin 理所当然找他的同班同学,但是同班同学的能力是参差不齐的。全班都很明确,这个工程可以分为 n 个不同的部分,每个部分都是独立,并且每个人都有一定的能力完成其中一个部分。Merlin 认为,自己应该去做项目经理的职位,把 nnn 个部分分配给若干个人,不同的部分可以分配给一个人或者多个人,但是一个部分只能分配给一个人。

Merlin 的人缘很好,同学们都愿意与他合作。但是,每个人每个部分能够得到的分数是不同的,Merlin 希望给每个人每个部分能够得到的分数一个估算(百分制),而能够得到的分数就是项目的个人部分的总和,最后求出平均值。即 最后分数=每个部分的分数 最后分数 = 每个部分的分数/n。

面对众多的分数,Merlin 已经害怕了,而且 Merlin 很懒,自己不想去做其中任何的一个部分,请你编写一个程序,帮助 Merlin 求出可以得到的最高分。

输入

第 1 行是一个正整数 n (n≤1000),表示项目可以划分为 nnn 部分。

第 2 行是一个正整数 m (m≤1000),表示全班一共有 mmm 个同学(不包括 Merlin)。

然后是 mmm 行 nnn 列的正整数,第 iii 行 jjj 列正整数 k(k≤100),示同学 i 可以在项目中的第 j 部分获得分数 kkk。

输出

只有一个实数。Merlin 能够得到的最大分数,结果保留两位小数。

输入输出样例

样例输入 #1

复制

5
5
90 90 90 85 90
90 85 90 90 85
90 90 85 90 90
90 90 90 90 85
85 90 85 90 90
样例输出 #1

复制

90.00

代码 

#include<stdio.h>
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    float a[m][n];
    for(int i=0; i<m; i++)
    {
        for(int ii=0; ii<n; ii++)
        {
            scanf("%f",&a[i][ii]);
        }
    }

    float sum=0;
    for(int i=0; i<n; i++)
    {
        float max=a[0][i];
        for(int ii=0; ii<m; ii++)
        {
            if(a[ii][i]>=max)
            {
                max=a[ii][i];
            }
        }
        sum+=max;
    }

    printf("%.2f",sum/n);


    return 0;
}

  • 31
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值