C语言基础练习——最大值及其位置(二维数组)

时间限制: 1 Sec  内存限制: 10 MB

题目描述

有一个n×m的矩阵,要求编程序求出: 
每行元素的最大值,以及其所在的行号和列号。求出所有元素的最大值,以及其所在的行号和列号。

输入

先输入n,m (2<=n<=100,2<=m<=100) 
在输入矩阵中各元素的值。(假设为整型数)

输出

先输出每行元素的最大值的下标及其值,每个占一行; 
再输出所有元素的最大值的下标及其值。

样例输入 Copy

3 4
1 2 3 4
10 11 12 13
3 4 5 6

样例输出 Copy

0 3 4
1 3 13
2 3 6
1 3 13 (思路和下面的代码对照着看)

我的思路是定义a[100][100]用于输入数据。
定义b[101][2]用于记录每行最大值所在的行号和列号,比如a[1][2],行号是1,列号是2

你可能注意到了我写的是b[101][2]而不是b[100][2],因为我把数组最大值的行号和列号放到了最后
比如有100行数据,那么b[101][0]和b[101][1]保存的就是数组最大值的行号和列号 先用一个nxm的循环输入数据 然后for循环i从0到n-1,找每一行的最大值。
先假定每行的行首是最大值max=a[i][0],那么行号是i,保存到b[i][0],列号是0,保存到b[i][1]
嵌套一个for循环k从1到n-1,让max和a[i][1]……a[i][n-1]比较,如果max<a[i][k],则修改max及其行号列号
嵌套循环结束后输出本行最大值及其行号列号 最后来一个for循环i从0到n-1,找数组的最大值
这里我先把每行最大值行号和列号取了出来,如果我写在一起可能看这篇文章的人就看不懂了
如果直接写就是这样,a[b[i][0]][b[i][1]],就是代码中的a[x][y]
先假定数组最大值是第一行的最大值,然后让其他行最大值与之比较,如果maxmax<a[x][y],则修改maxmax及其行号列号
程序最后输出数组最大值及其行号列号 下面是实现代码:
 #include <stdio.h>
int main()
{
int a[][],b[][];
int n,m,i,k;
scanf("%d%d",&n,&m);
for(i=; i<n; i++)
{
for(k=; k<m; k++)
{
scanf("%d",&a[i][k]); //输入
}
}
for(i=; i<n; i++) //找每行最大值
{
int max=a[i][]; //假定行首为最大值
b[i][]=i; //行首行号
b[i][]=; //行首列号
for(k=; k<m; k++)
{
if(max<a[i][k])
{
max=a[i][k]; //修改第i行最大值
b[i][]=k; //行内最大值,只有列号变化
}
}
printf("%d %d %d\n",b[i][],b[i][],max); //输出第i行最大值及其行号列号
}
int maxmax; //整个数组的最大值
for(i=; i<n; i++)
{
int x=b[i][]; //第i行最大值的行号
int y=b[i][]; //第i行最大值的列号
if(i==) //第0行
{
maxmax=a[x][y]; //假定第0行最大值为数组最大值
b[n][]=; //行号
b[n][]=; //列号
}
else //其他行
{
if(maxmax<a[x][y])
{
maxmax=a[x][y]; //修改数组最大值
b[n][]=x; //行号
b[n][]=y; //列号
}
}
}
printf("%d %d %d",b[n][],b[n][],maxmax); //输出数组最大值及其行号列号
return ;
}
 

C语言基础练习——最大值及其位置(二维数组)的更多相关文章

  1. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  2. c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

    //题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. // #include "stdio.h" #include <stdli ...

  3. 【C语言入门教程】4.2 二维数组

    C 语言允许使用多维数组,即使用多组小标的数组,二维数组是最常用的多维数组.多维数组在内存中存放数据的顺序与一维数组相同,使用连续的存储单元. 4.2.1 二维数组的一般形式 二维数组的一般声明形式为 ...

  4. C语言程序,找出一个二维数组的鞍点。

    什么是鞍点????? 鞍点就是在一个二维数组中,某一个数在该行中最大,然而其在该列中又是最小的数,这样的数称为鞍点. 昨天突然在书上看到这样的一道题,就自己尝试着写了一个找出一个二维数组中的鞍点. 好 ...

  5. 【C语言】构造长度可变的二维数组

    #include <stdio.h> #include <malloc.h> #include <memory.h> int getArray(int ***p,i ...

  6. 《Java基础知识》一维,二维数组的申明和使用

    为什么要使用数组: 因为不使用数组计算多个变量的时候太繁琐,不利于数据的处理. --------   数组也是一个变量,是存储一组相同类型的变量 声明一个变量就是在内存中划出一块合适的空间 声明一个数 ...

  7. Java基础系列(39)- 二维数组

    多维数组 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组. 二维数组 int a[][]=new int[2][5]; 解析:以上二维数组a可以看成一个 ...

  8. C语言:通过指针函数输出二维数组中每个学生的成绩

    // //  main.c //  Pointer_function // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 bjsxt. ...

  9. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

随机推荐

  1. 修改tomcat控制台的标题

    Tomcat的bin目录下,创建一个名为setenv.bat的文件. setenv.bat  编辑内容 : set TITLE = 想要命名的标题名称  保存修改.重新启动. 第二种. 修改tomca ...

  2. 在CUDA8.0下指定位置编译安装OpenCV3.1.0来实现GPU加速(Compiling OpenCV3.1.0 with CUDA8.0 support)

    在CUDA8.0下指定位置编译安装OpenCV3.1.0 一.本人电脑配置:ubuntu 14.04, NVIDIA GTX1060. 二.编译OpenCV3.1.0前,读者需要成功安装CUDA8.0 ...

  3. 【redis 学习系列】API的理解与使用(三)

    4.列表 列表(list)类型是用来存储多个有序的字符串,如图2-18所示,a.b.c.d.e五个元素从左到右组成一个有序列表,列表中的每个字符串称为元素,一个列表最大可以存储2^32-1个元素.在R ...

  4. 如何选CDN:互联网大直播时代的CDN选择指南

    转: 如何选CDN:互联网大直播时代的CDN选择指南 from:  http://www.chnvideo.com/blog-classic-cdn.html SRS 编码器   如何选CDN:互联网 ...

  5. IPv4 地址分类-for what

    怎么分的:IPV4 地址分类 A B C D E 分来做什么:IP地址为什要分类?就是a类,b类,c类...? - wuxinliulei的回答 - 知乎

  6. Flutter常见数据类型及数据类型转换

    简介 既然 Dart 是一门语言,那么就和我们所知道语言一样,有基本的数据类型以及常见的流程处理语法,那么我们就来了解下. Dart 的所有东西都是对象,包括数字,函数等.它们都继承自 Object ...

  7. ELMO及前期工作 and Transformer及相关论文

    论文1 https://arxiv.org/pdf/1705.00108.pdf Semi-supervised sequence tagging with bidirectional languag ...

  8. hibernate关联映射之一对多&多对一

    package loaderman.b_one2Many; import java.util.HashSet; import java.util.Set; public class Dept { pr ...

  9. java高级之多线程

    1.1,多线程的作用: *线程是程序执行的一条路径, 一个进程中可以包含多条线程 *多线程并发执行可以提高程序的效率, 可以同时完成多项工作 1.2,多线程的应用场景: * 红蜘蛛同时共享屏幕给多个电 ...

  10. 扩展:Zero Copy