C语言课程设计 求马鞍点

C语言课程设计 求马鞍点,第1张

/如果A[i][j]是第i行中值最小的元素且又是j列中值最大的元素,则称之为一个马鞍点,要求实现一个mхn矩阵的所有马鞍点。/

#include <stdioh>

#define M 4

#define N 3

typedef struct node

{

int value;

int m;

int n;

}node;

void main()

{

int A[M][N] = {3,4,5,2,3,1,3,5,2,0,0,1};

int i = 0,j = 0, k = 0;

node tmpnode = {0};

int findflag = 1;

for(i = 0; i < M; i++)

{

tmpnodevalue = A[i][0];

tmpnodem = i;

tmpnoden = 0;

findflag = 1;

/找出i行最大值/

for(j = 0;j <N;j ++)

{

if(tmpnodevalue < A[i][j])

{

tmpnodevalue = A[i][j];

tmpnodem = i;

tmpnoden = j;

}

}

/判断是否是j列最小值/

for(k =0;k <M;k++)

{

if(tmpnodevalue > A[k][tmpnoden])

{

findflag = 0;//不是j列最小值

break;

}

}

/找到了则输出结果/

if(findflag)

{

printf("\n i = %d, j =%d, A[%d][%d] = %d\n",tmpnodem,tmpnoden,tmpnodem,tmpnoden,tmpnodevalue);

}

}

}

你这程序有很多问题,比如说你那查找的for循环就有问题;因为我以前没编过,所以我用C++重新帮你编了,你要用void chazhao(int a[][1000],int h,int l)这样才是对的,我用的是动态数组,你看看吧,不懂的HI我。

#include "iostream"

using namespace std;

void chazhao(int a,int h,int l)//查找;

{

int c=0;

int min;

int flag=0;//标志位,1为找到了,0为没找到;

min=a[0][0];

for(int i=0;i<h;i++)

{

for(int j=0;j<l;j++)

{

if(a[i][j]<min)

{

min=a[i][j];

c=j;

}

//找出第i行的最小值; c列;

}

for(j=0;j<h;j++)

{

if(a[j][c]>min) //比较第i行第c列是不是第c列中最大值;

{

flag=0;

break;

}

else flag=1;

}

if(flag==1)//在第i行找到了

{

cout<<"第"<<i<<"马鞍点为a["<<i<<"]["<<c<<"]="<<a[i][c]<<endl;

}

else

{

cout<<"第"<<i<<"行的马鞍点不存在!"<<endl;

}

}

}

void Display(int a,int h,int l)//显示你输入的数组;

{

for(int i=0;i<h;i++)

{

for(int j=0;j<l;j++)

{cout<<a[i][j]<<'\t';}

cout<<endl;

}

}

void main()

{

int h,l;

int p;//用动态数组储存,节省空间;

cout<<"请输入你查找马鞍点的数组的行和列:\n";

cin>>h>>l;

p = new int [h];

for(int i=0;i <= h-1;i++)

{

p[i]=new int[l];

}

cout<<"请输入你要查找马鞍点的数组:\n";

for(i=0;i<h;i++)

{

for(int j=0;j<l;j++)

{

cin>>p[i][j];

}

cout<<endl;

}

Display(p,h,l);

chazhao(p,h,l);

delete []p;//释放空间;

}

#include#defineN10#defineM10voidmain(){inti,j,k,m,n,flag1,flag2,a[N][M],max,maxj;printf("输入行数n:");scanf("%d",&n);printf("\n输入列数m:");scanf("%d",&m);for(i=0;imax){max=a[i][j];maxj=j;}for(k=0,flag1=1;ka[k][maxj])flag1=0;if(flag1){printf("\n第%d行第%d列的%d是鞍点\n",i,maxj,max);flag2=1;}}if(!flag2)printf("\n矩阵无鞍点!\n");}

可以修改M和N来修改矩阵的维数

#include<stdioh>

#define M 3

#define N 3

main()

{

int i,j,obj,p,q,flag=1,flag2=0;

float a[M][N];

printf("请输入矩阵元素!\n");

for(i=0;i<M;i++)

for(j=0;j<N;j++)

scanf("%f",&a[i][j]);

printf("矩阵元素如下:\n");

for(i=0;i<M;i++)

{

for(j=0;j<N;j++)

printf("%f ",a[i][j]);

printf("\n");

}

for(i=0;i<M;i++)

{

obj=a[i][0];

p=0;

for(j=1;j<N;j++)

if(obj<a[i][j])

{

obj=a[i][j];

p=j;

}

for(j=0;j<N;j++)

if(obj>a[j][p])

{

flag=0;

break;

}

flag2+=flag;

if(flag==1)

printf("有鞍点:a[%d][%d]=%f\n",i,p,a[i][p]);

}

if(flag2==0)

printf("没有鞍点!\n");

}

public class P1{

private int[][] a=null;

private int rownum=0,colnum=0;

//存储每行中最小的那个数的行和列,如"1,2"---第一行,第二列

private int[] rows=null;

//存储每列中最大的那个数的行和列,如"1,2"---第一行,第二列

private int[] cols=null;

private int num=0;

P1(int[][] a,int row,int col){

thisa = a;

thisrownum=row;

thiscolnum=col;

rows = new int[row];

cols = new int[col];

}

public void setMinRow(){

int min;

int minIndex;

for(int r=0;r<rownum;r++){

min = a[r][0];

minIndex=0;

for(int c=0;c<colnum;c++){

if(a[r][c]<min){

min = a[r][c];

minIndex=c;

}

}

rows[r]=minIndex;

}

}

public void setMaxCol(){

int max;

int maxIndex;

for(int c=0;c<colnum;c++){

max = a[0][c];

maxIndex=0;

for(int r=0;r<rownum;r++){

if(a[r][c]>max){

max = a[r][c];

maxIndex=r;

}

}

cols[c]=maxIndex;

}

}

public void getSaddleNUm(){

setMinRow();

setMaxCol();

for(int r=0;r<rownum;r++){

if(r==cols[rows[r]]){

num++;

Systemoutprintln("第"+num+"个马鞍点是行"+r+"列"+rows[r]+":"+a[r][rows[r]]);

}

}

}

public void print(){

for(int r=0;r<rownum;r++){

for(int c=0;c<colnum;c++){

Systemoutprint(a[r][c]+" ");

}

Systemoutprintln("");

Systemoutprintln("-----------");

}

}

public static void main(String[] args){

//存放矩阵的数值

int[][] a1 = {{1,5,9,10,2},{7,5,6,3,2},{11,7,9,0,12},{6,9,13,10,21},{11,4,13,40,32},{21,16,91,100,42}};

//第一个参数为存放矩阵的数组,第二个参数为矩阵行数,第三个为矩阵列数

P1 p = new P1(a1,6,5);

pgetSaddleNUm();

pprint();

Systemoutprintln("矩阵拥有的马鞍点数为:"+pnum);

}

}

以上就是关于C语言课程设计 求马鞍点全部的内容,包括:C语言课程设计 求马鞍点、二维数组寻找马鞍点问题,希望各位大大们赐教,在此先鞠躬了,谢谢! 以下是我编的程序和错误提示!、设计一个Java程序,查找二维数组中的马鞍点(本行中最小、但本列中最大的点。假设二维数组中没有重复数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9858662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存