输出结果正确,显示运行错误,请帮我看一下哪错了。

给出一个p*m 的矩阵,矩阵中存在这样一类数:
1该数为质数 (只能被1和它本身整除)
2该数上下左有相邻的数(如果存在的话)都为偶数
现在请你在矩阵中找出这一类数中最大的一个。
输入:
第一行两个整数口和m (1 ≤n.m ≤ 100)
接下来 口行,每行 m 个整数 (不超过1000),表示该矩阵。
输出:
一行一个整数,表示矩阵中存在的这一类数中最大的一个,若不存在这样的数,则输出-1。
样例输入:
5 5
1 4 7 10 2
8 5 2 5 11
0 8 10 4 9
1 0 6 23 8
10 5 2 8 9
样例输出:
23

img

贴出代码,方便阅读和调试
int a[1000][1000]; int b[1000]; 遍历时下标0~999,1000就越界了;e j k 的初值都为0(从1开始第一个浪费了),循环条件判断用<,不是<=;判断它四周的元素,要判断这个元素下标在0~n-1或者0~m-1之间,表示存在。以上都可能导致数组越界,修改后再试试。sort() 里面不要+1,能不能排序再说

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7597224
  • 除此之外, 这篇博客: 实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人中的 实验题目:约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下一个人开始重新从1报数,报到m时停止并且报m的人出列。如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,对任意给定的m和n,求出出列编号序列。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<iostream>
    #define MAXSIZE 50
    using namespace std;
    typedef int Elemtype;
    // 定义顺序表结构体
    typedef struct
    {
    	Elemtype data[MAXSIZE];
    	int length;
    }Sqlist;
    //另一种结构体类型名方式*Sqlist
    //typedef struct
    //{
    //	Elemtype data[MAXSIZE];
    //	int length;
    //}*Sqlist;
    
    //创建顺序表思想:直接把有几个人复制到顺序表中,没有书上那种的原因是书上是用的数组
    void CreateList(Sqlist *& s)//另一种结构体时void CreatList(Sqlist  s)
    {
    	int n;
    	cout << "输入共有几个人" << endl;
    	cin >> n;
    	cout << " 最开始的编号为:" << endl;
    	for (int i = 0; i < n; i++)
    	{
    		s->data[i] = i + 1;
    		cout << s->data[i] << " ";
    		s->length = n;
    	}
    	cout << endl;
    }
    //初始化线性表
    void InitList(Sqlist *& L)//另一种结构体时void InitList(Sqlist  L)
    {
    	L = (Sqlist*)malloc(sizeof(Sqlist));
    	L->length = 0;
    }
    // 实现约瑟夫环的算法:1.(t+m-1)%s->length, 这个s->length表示的是每次出列后参数顺序表的长度都会变化,通过%来实现环的意思跟环队形有点类似
    //2.每次出列一个后,所有后面的数据向前一位顶替原来出列的数,形成一个新的表
    //3.一共循环s->length次
    void Joseph(Sqlist * s,int m)
    {
    	int t=0;
    	int i,j;
    	cout << "出列序列" <<endl;
    	for (i = s->length; i >= 1; i--)
    	{
    		t = (t + m - 1) % i;//关键
    		cout << s->data[t] << " ";
    		for ( j = t + 1; j <= i - 1; j++)//关键
    		{
    			s->data[j - 1] = s->data[j];
    		}
    	}
    	cout << endl;
    }
    //实现约瑟夫环的算法:1.(t+m-1)%s->length, 这个s->length表示的是每次出列后参数顺序表的长度都会变化,通过%来实现环的意思跟环队形有点类似
    //2.每次出列一个后,所有后面的数据向前一位顶替原来出列的数,形成一个新的表
    //3.一共循环s->length次
    //void Joseph(Sqlist* s, int m)//另一种结构体时(Sqlist L)
    //{
    //	int t = 0;
    //	cout << "出列序列" << endl;
    //	for (s->length;  s->length>= 1; s->length--)
    //	{
    //		t = (t + m - 1) % s->length;//关键
    //		cout << s->data[t] << " ";
    //
    //		for (int j = t + 1; j <= s->length - 1; j++)//关键
    //		{
    //			s->data[j - 1] = s->data[j];
    //		}
    //	}
    //	cout << endl;
    //}
    int main()
    {
    	Sqlist *L;//另一种结构体时Sqlist L;
    	int m;
    	InitList(L);
    	CreateList(L);
    	cout << "想要报的m数:" << endl;
    	cin >> m;
    	Joseph(L, m);
    	return 0;
    }
    

    在这里插入图片描述