在java 二维数组组中找一数有则显示位置,没有则显示该数没有找到

在一个按行列递增的二维数组中查找一个数是否存在
唯一要求:二维数组按行列递增
巧妙的利用二分法的特性,先跟右上角的元素相比,大于行+1,小于列-1,否则返回行列
#define M 3
void array_bsearch(int array[][M],int value)
int i=0;//行
int j=M-1;//列
while(i=0)
if(value & array[i][j])
else if(value & array[i][j])
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'&&&&找出一个二维数组的鞍点,即该位置上的元素在该行上最大、在列上最小(也可能没有鞍点)。Java
找出一个二维数组的鞍点,即该位置上的元素在该行上最大、在列上最小(也可能没有鞍点)。Java
找出一个二维数组的鞍点,即该位置上的元素在该行上最大、在列上最小(也可能没有鞍点)。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
课程资源下载排行只需一步,快速开始
后使用快捷导航没有帐号?
查看: 1607|回复: 4
编写一个函数find,其功能是在一个m行n列的二维整型数组中查找整数num。
签到天数: 101 天[LV.6]常住居民II
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
本帖最后由 缈淼 于
00:56 编辑
#include&stdio.h&
int&&find (int *p,&&int&&m, int&&n,&&int&&num, int *row,&&int *col);
int main()
& & & & int a[100 * 100], n, m, i, j, num, l,
& & & & scanf(&%d%d&, &m, &n);
& & & & for(i=0; i&m; i++) {
& & & & & & & & for(j=0; j&n; j++) {
& & & & & & & & & & & & scanf(&%d&, &a[i * n + j]);
& & & & & & & & }
& & & & scanf(&%d&, &num);
& & & & if(find(a, m, n, num, &l, &k) == 1)
& & & & & & & & printf(&%d %d&, l, k);
& & & & } else
& & & & & & & & printf(&NOT FOUND&);
& & & & return 0;
int find (int *p,&&int m, int n,&&int num, int *row,&&int *col) {
& & & & int i, j, flag = 0;
& & & & for(i=0; i&m; i++)
& & & & & & & & for(j=0; j&n; j++) {
& & & & & & & & & & & & if(p[i * n + j] == num) {
& & & & & & & & & & & & & & & & *row =
& & & & & & & & & & & & & & & & *col =
& & & & & & & & & & & & & & & & flag = 1;
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & }
& & & & else
& & & & & & & & *row = -1;
& & & & & & & & *col = -1;
& & & & & & & & flag == 0
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 234 天[LV.7]常住居民III
回帖奖励 +2
粗率看一下,52行 return3个返回值:titter:
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 101 天[LV.6]常住居民II
oggplay 发表于
粗率看一下,52行 return3个返回值
一个也不对,你不会是为了拿这2鱼币吧。。。。
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 316 天[LV.8]以坛为家I
额..怎么说呢,首先建议变量命名做到见名知意;其次代码最好有注释,即使自我感觉没必要,但是我想注释是编程的灵魂,不要小看注释,它是体现编程思想所在...
15,16,20行三次调用find函数,这个太重复了....15行可以删去,20行可以改成else
find函数第一个参数可能传错了吧,或者说定义就不好,改为find(int **a,...)
find函数中i和j都等于p,且自曾都为1,这有问题吧
52行返回3个参数,这在c语言中没有这一做的,...
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
签到天数: 316 天[LV.8]以坛为家I
#include &stdio.h&
#include &stdlib.h&
typedef struct{
& &
& &
}P& && &&&//定义一个存储位置的数据结构
int FindNum(int (*arr)[100],int rows,int cols,int num,Pos *pos){
& & int row,
& & int bIsCnt=1;& & //是否继续寻找
& & for(row=0;bIsCnt&&row&row++)
& && &&&for(col=0;bIsCnt&&col&col++){
& && && && &if(arr[row][col]==num){
& && && && && & pos-&row=& & //找到的行和列写入该数据结构
& && && && && & pos-&col=
& && && && && & bIsCnt=0;& & //跳出循环
& && && && &}
& && &&&}
& & if(bIsCnt) return 0;& & //没有找到返回0
& & return 1;& && &&&//找到返回1
}
int main()
{
& & int arr[100][100],rows,
& & int i,j,
& & Pos *pos=(Pos *)malloc(sizeof(Pos)); //开辟一个空间存储位置数据
& & printf(&输入行和列(空格间开)&);
& & scanf(&%d%d&,&rows,&cols);
& & printf(&输入数据:\n&);
& & for(i=0;i&i++)
& && &&&for(j=0;j&j++)
& && && && &scanf(&%d&,&arr[i][j]);& & //输入数据
& & printf(&输入要查询的数据:&);
& & scanf(&%d&,&num);
& & if(FindNum(&(arr[100]),rows,cols,num,pos)){ //返回1则找到
& && &&&printf(&num %d - row:%d col:%d\n&,num,pos-&row,pos-&col);
& & }
& & else{& & //没有找到
& && &&&printf(&Not Found!\n&);
& & }
& & return 0;
}复制代码
如果您的【问题求助】得到满意的解答,请自行将分类修改为【已经解决】;如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】鼓励;善用【论坛搜索】功能,那里可能有您想要的答案!
•••(
Powered by找一个二维数组中在某位置上面的元素在该行上最大,在该列上最小,下面的程序错哪了 - C语言当前位置:& &&&找一个二维数组中在某位置上面的元素在该行上最大,找一个二维数组中在某位置上面的元素在该行上最大,在该列上最小,下面的程序错哪了&&网友分享于:&&浏览:0次找一个二维数组中在某位置上面的元素在该行上最大,在该列上最小,下面的程序哪里错了。找一个二维数组中在某位置上面的元素在该行上最大,在该列上最小,下面的程序哪里错了。
#include&stdio.h&
int&main()
&&int&a[3][3];
&&int&i,j,k,iMax,jM
&&int&max=0,
&&for(i=0;i&=2;i++)
&&&&for(j=0;j&=2;j++)
&&&&&&scanf("%d",&a[i][j]);
&&&&for(i=0;i&=2;i++)
&&&&&&//找出行最大的数
&&&&&&&&for(j=0;j&=2;j++)
&&&&&&&&&if(a[i][j]&=max)
&&&&&&&&&&{
&&&&&&&&&&max=a[i][j];
&&&&&&&&&&}
&&&&&&&&&&jMax&=&j;
&&&&&&&&&&iMax&=&i;
&&&&&&&min&=&
&&&&&&&//判断在该列上是不是最小
&&&&&&&for(k=0;k&=2;k++)
&&&&&&&&if(a[k][jMax]&=min)
&&&&&&&&&&min&=&a[k][jMax];
&&&&&&&if&(min&==&max)
&&&&&&&&printf("exist&An&Dian&%d\n",min);
&&&&&&else
&&&&&&&&printf("not&exist\n");
&&&&return&0;
}------解决思路----------------------
&&&&&&&max=a[i][j];
&&&&&&&&&&}
&&&&&&&&&&jMax&=&j;
&&&&&&&&&&iMax&=&i;
&&&&&&&max=a[i][j];
&&&&&&&jMax&=&j;
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 信1101-2
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 胡弦琴
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&王兵茹
&&&&& 这周一的时候老师给的课上练习是在上一次的基础上,将一位数组改成二维数组,求二维数组中子数组和的最大值。由于课上时间不多了,只是大概想了一个思路,我们刚开始想的是穷举法实现,具体的分析也就是下面我们纸上画的这些。
&&&&& 从一开始将所有的可能都遍历一遍,然后求出最大值。这种算法的时间复杂度o(n*n*m*m),这种想法虽然可以实现,但是是一种非常浪费时间的算法.它在实现的时候需要嵌套四层的for循环,所以比较麻烦。在这种理解的基础上,我们要想到了下面的解决方案。
&&&&& 具体的转换如下:
&&&&& 这种方法的特殊边界要考虑,首先求出p[i][j],表示以(0,0)为起点,以(i,j)为终点的的连续子数组的和,起点是第a行,终点是第c行,然后转换为一维连续子数组的和;首先应该找出p[i][j],
//计算p[i][j]
for(i=0;i&n;i++)
p[i]=new int[m];
for(j=0;j&m;j++)
p[i][j]=a[i][j];
p[i][j]=p[i][j-1]+a[i][j];
p[i][j]=p[i-1][j]+a[i][j];
p[i][j]=p[i][j-1]+p[i-1][j]-p[i-1][j-1]+a[i][j];
然后就开始找所有子数组中和的最大值了,初始化为max[0][0];
#include &iostream&
using namespace
int maxSubArray(int **a,int n,int m)
int **p=new int*[n];
if(m==0||n==0)
//计算p[i][j]
for(i=0;i&n;i++)
p[i]=new int[m];
for(j=0;j&m;j++)
p[i][j]=a[i][j];
p[i][j]=p[i][j-1]+a[i][j];
p[i][j]=p[i-1][j]+a[i][j];
p[i][j]=p[i][j-1]+p[i-1][j]-p[i-1][j-1]+a[i][j];
//计算二维数组最大子数组的和
int max=a[0][0];
//如果m==1
for(i=0;i&n;i++)
for(j=i;j&n;j++)
temp=p[j][m-1];
temp=p[j][m-1]-p[i-1][m-1];
if(ans&temp)
for(i=0;i&n;i++)
for(j=i;j&n;j++)
temp=p[j][m-1]-p[j][m-2];
temp=p[j][m-1]-p[j][m-2]-p[i-1][m-1]+p[i-1][m-2];
for(int k=m-2;k&=0;k--)
if(temp&0)
temp+=p[j][k];
temp+=p[j][k]-p[j][k-1];
temp+=p[j][k]-p[i-1][k];
temp+=p[j][k]-p[j][k-1]-p[i-1][k]+p[i-1][k-1];
if(ans&temp)
int main()
printf("请输入二维数组的行数和列数:\n");
scanf("%d %d",&n,&m);
int **a=new int*[n];
printf("请输入%d*%d个二维数组元素:\n",n,m);
for(i=0;i&n;i++)
a[i]=new int[m];
for(j=0;j&m;j++)
scanf("%d",&a[i][j]);
int ans=maxSubArray(a,n,m);
printf("二维数组的最大子数组之和是:%d\n",ans);
运行结果如下:
阅读(...) 评论()

我要回帖

更多关于 python 二维数组 的文章

 

随机推荐