找出一个二维数组中的鞍点与写出一个五阶魔方阵

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进更高效! 阅读详情

鞍点:

鞍点就是该元素在这个二维数组中,是它所在行的最大值,并且是它所在列的最小值。
所以找鞍点可以转化为找极值问题。
代码:

int main()
{
	int a[3][3] = {
		10,11,12,
		9,8,7,
		15,14,20};
	int i=0,j = 0,k=0;
		int len1 = sizeof(a) / sizeof(a[0]);
		int len2 = sizeof(a[0]) / sizeof(a[0][0]);
		int max,xb,flag ;
		for (i = 0; i < len1; i++)
		{
			flag = 0;
			max = a[i][0];
			xb = 0;
			for (j = 0; j < len2; j++)
			{
				if (max < a[i][j])
				{
					max = a[i][j];
					xb = j;
				}
			}
			for (k = 0; k < len1; k++)
			{
				if (a[k][xb] < max) {  flag = 1; }
			}
			if (flag == 0) { printf("%d是鞍点", max); break; }
		
		}
		if(i>=len1)printf("没有鞍点");
	
	return 0;
}

主要思想是,先从行遍历,找出这行的最大值,然后确定该值的列下标,然后列下标不变,对每一行进行遍历,如果有小于该数的数,则它就不是鞍点,如果没有就是鞍点。
我给定的二维数组的鞍点是9。如图所示:
在这里插入图片描述

五阶魔方阵

代码:

int main()
{
	const int n = 5;
	int a[5][5] = { 0 };
	int i = 0;
	int j = n / 2;
	int i1, j1;
	for (int k = 1; k <= n*n; k++)
	{
		a[i][j] = k;
		i1 = i-1;
		j1 = j+1;
		if (i - 1 < 0) { i1 += n; }
		if (j + 1 >= n) { j1 -= n; }
		if (a[i1][j1] != 0)
		{
			i1 = i + 1;
			j1 = j;
		}
		i = i1;
		j = j1;
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			printf("%-3d ",a[i][j]);
		}
		puts("");
	}

	return 0;
}

思想是从第一行的最中间开始,给第一行最中间的位置赋1,给其右上方的位置赋2,如果下标越界了分两种情况,(1)i-1越界,则令i=i-1+n(n为魔方阶数);(2)j+1越界,则令j=j+1-n;如果下标并没有越界,而是其右上角的位置被占了,那么下一个数就放在上一个数的下方,这样就可以把25个位置全部放满。
结果如图所示:
在这里插入图片描述

找出一个二维数组中的鞍点(C) 鞍点:在一个二维数组中,有一个数据,同行它最大,同列它最小 阅读详情

相关推荐

第六章习题

1. 用筛选法求100之内的素数。

m0_53360534的博客 105

C++寻找5*5矩阵鞍点并输出DIY自定义

#include<stdio.h> int main() { int a[5][5]; int b[5]; int i, j, t; int flag = 0;//用于标示数组b中是否存在不是-1的元素 printf("输入一个5*5二维数组:\n"); for (i = 0; i<5; i++) { scanf("%d %d %d %d %d", &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a.

dongbao520的博客 1022

鞍点的求解以及对称矩阵的存储和数据的获取

1.鞍点 如果在一个矩阵中,出现了一个数,它在矩阵中的所在的行里是最小的,但在所在的列里是最大的,测称这个数是这个矩阵一个鞍点。 2、鞍点求解思路 首先先求出第一行中最小的数,然后求该数在所在列是否是最小,是的话说明是鞍点,否的话继续求下一行最小的数,接着循环求证是否是所在列最小。代码如下: /* 鞍点,如果aij在第i行中最小但在第j列中最大,就

HyHarden的博客 1288

找出一个二维数组中的鞍点

找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。 解题流程如下: 对每行进行遍历。先找到每行的最大值,然后再确定该最大值是否是所在列的最小值,若满足,则为鞍点,遍历停止;否则,继续,若遍历完所有行之后依旧未找到,则表示该二维矩阵鞍点。 #include&lt;stdio.h&gt; int main() { int a[4][5]; int i,j,k...

一只睡不醒的猪 3万+

/*输入一个5*5的矩阵,输出所有的鞍点。所谓鞍点是指某一行中的最大值也是该列中的最小值。*/

/*输入一个5*5的矩阵,输出所有的鞍点。所谓鞍点是指某一行中的最大值也是该列中的最小值。*/ int 数据组[5][5] = { { 0 } }, 组(0), 维(0), 比较(0), 序(0), 找(0); do { std::cin >> 数据组[组][0] >> 数据组[组][1] >> 数据组[组][2] >> 数据组[组][...

浤济的专栏 5803

函数,二维字符数组

类型标识符 函数名 (形式参数)函数体代码数据类型----表示函数要带出的结果的类型注意:数组类型不能做函数返回结果的类型。返回结果的类型需注意:a.如果函数不需要带出什么结果,此时返回结果的类型说明符就一般设计为void ,如果类型为void,一般不写return。如果要写------ return;b.如果 返回结果的类型 类型说明符不一致,以 类似说明符 为准。(最终结果的类型,都会转为类型说明符表示的类型 )c.类型说明符如果不写,就默认是 int 类型。

weixin_62989562的博客 1383

两道关于二维数组的题, 鞍点,三维数组的深度

1.找出一个二维数组中的鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没有“鞍点”),打印有关信息。(提示:注意特殊情况:没鞍点或多个鞍点) 2.随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中(相当于一个方从上面看)

Sooober的博客 638

C语言代码练习(第十九天)

C语言代码练习

2201_75306399的博客 703

C语言程序设计(第版)谭浩强 第六章习题答案

仅用作自己C语言刷题时的答案记录。文字题答案均是教材上的描述,代码题答案不唯一,仅供参考。

Dylan的博客 7186

蓝桥杯——数组、函数问题典例二(2017.1.18)

一、几个矩阵类问题 1. m*n矩阵转置 (1)就地转置:针对m=n的情况,此时矩阵方阵 源代码: #include #define maxn 50 void trans(int a[][maxn],int n) //就地转置矩阵 { int i,j; int temp; for(i=0;i<n;i++) //仅需处理矩阵下三角部分

cr496352127的博客 443

c语言第七章课后作业鞍点,c语言第七章试题

7.1 用筛选法求100之内的素数。7.2 用选择法对10个整数排序。7.3 求一个3*3的整型矩阵对角线元素之和。#include"stdio.h"void main(){int a[3][3],i,j,sum=0;printf("please input array a[3][3]:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a...

weixin_34000790的博客 214

多维数组

1、(**)有一个3行4列的二维数组,要求编程找出最大的元素,并输出所在的行和列。 int a[3][4] = {0}; int max = 0; for (int i = 0; i &lt; 3; i++) { for ( int j = 0; j &lt; 4; j++) { a[i][j] = arc4random()...

Jesse0308的博客 465

C++算法设计分析例题代码(基础篇)

Wild Chicken Programing TANXL C++算法设计分析例题代码前言一、求1/1!-1/3!+1/5!-1/7!+...+(-1)^(n+1)/(2n-1)! 前言 最近在读清华大学出版社的算法设计分析(第三版),把书中的例题完成了一下,并记录于此。(随缘更新) 一、求1/1!-1/3!+1/5!-1/7!+…+(-1)^(n+1)/(2n-1)! #include <iostream> using namespace std; int main() { i

TANXL_csdn 4801

谭浩强 第版 第六章数组习题(部分)

鞍点是指在二维数组中某个元素,它在所在行中是最大的,而在所在列中是最小的。这意味着如果我们只看这一行,这个元素是最大的;如果我们只看这一列,这个元素是最小的。

Roche_Brand的博客 432

C程序设计(谭浩强第版)第六章习题精解。C语言课后习题解析。C语言考研,C语言专升本,C语言期末考试,初学C语言,程序设计基础,编程题必备。C语言第四章:选择结构程序设计编程题解析。

C程序设计(谭浩强第版)第六章习题精解 第六章:利用数组处理批量数据目录: 用筛选法求100之内的素数 2.用选择法对10个整数排序 3.求一个3 X 3的整形矩阵对角线元素之和 4.有一个已经排好序的数组,要求输入一个数后,按原来顺序的规律 将它插入数组中 5.将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1。 要求改为1,4,5,6,8。 6.输出一下的杨慧三角(要求输出10行) 7.输出"方阵"。所谓方阵是指这样的方阵,它的每一行、每一列 和对角线之和均相等。例

立志冲海大 2284

C语言程序设计(第四版)谭浩强 课后习题答案 第六章

C语言程序设计(第四版)谭浩强 课后习题答案 第六章第六章1.用筛选法求100内的素数2.用选择法对10个整数排序3.求一个3*3矩阵,对角线元素之和4.有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中5.将一个数组中的值按逆序重新存放7.杨辉三角形(至少10层)8.输出方阵9.找出一个二维数组中的鞍点9.有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用这般查找法找出该数是数组中第几个元素的值。10.有一篇文章,共有3行文字,每行有80个字符,要求分别统计大写字母、小写字

o_p_1的博客 2615

C语言编程题5道

⑤如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。如按上面的规定,4应放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。18、编写一人个求X的Y次幂的递归函数,X为double型,y为int型,要求从主函数输入x,y的值,调用函数求其幂。③ 如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应放在第3行第3列。④ 当上一个数的列数为n时,下一个数的列数应为1,行数减1。如2在第3行第3列,3应在第2行第1列。

技术日常 1036

C语言程序设计第版 谭浩强著 第六章165-167习题以及答案

1.用筛选法求100以内的素数。 #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() { int i,j,a[100],b[100]; for (i=1;i&lt;=100;i++) { a[i]=i+1; for (j=1;j&lt;sqrt(a[i]);j++)...

qq_42313319的博客 3万+

C语言编程题11道

⑤如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。6、建立一个链表,每个结点包括:学号、姓名、性别、年龄,输入一个学号,如果链表中的结点包括该学号,则输出该结点内容后,并将其结点删去。2、编写一人个求X的Y次幂的递归函数,X为double型,y为int型,要求从主函数输入x,y的值,调用函数求其幂。③ 如果上一数的行数为1,则下一个数的行数为n(最下一行),如在3×3 方阵中,1在第1行,则2应放在第3行第3列。如2在第3行第3列,3应在第2行第1列。

技术日常 1507
上一篇: 为什么rand函数生成的随机数是固定的
下一篇: 由两个绝对路径来推出相对路径 与 输出九九乘法表
bareheadedman
博客等级 码龄7年 18粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值