所以我正在研究这个问题 我应该写一个程序,从给定的2D数字矩阵分配2D数组的动态内存,并找到最长的连续递增或递减序列。变得棘手,因为程序还必须垂直读取序列
所以我在这里尝试使用简单的逻辑进行编码,但是当我尝试垂直读取数字序列时,它一直向我显示退出状态1。 我想知道导致退出状态的原因以及另外一种处理退出状态的方法
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int **make2dArray(int rows, int cols);
void free2dArray(int **array, int rows);
int main(){
int **myM = NULL;
FILE*fp1 = NULL;
FILE*fp2 = NULL;
FILE*fp3 = NULL;
int c = 0;
int r = 0;
fp1 = fopen("1.txt","r");
fp2 = fopen("2.txt","r");
fp3 = fopen("3.txt","r");
fscanf(fp2,"%d %d",&r, &c);
myM = make2dArray(r,c);
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
fscanf(fp2,"%d",&myM[i][j]);
printf("%d",myM[i][j]);
}
}
printf("\n");
int cnt=0; int inc_dec=0;
for(int i=0;i<r;i++){
inc_dec=1;
for(int j=0;j<c;j++){
if(myM[i][j]==1+myM[i][j+1]){
++inc_dec;
if(inc_dec!=0 && myM[i][j]!=1+myM[i][j+1]){
inc_dec=1;
}
}
else if(1+myM[i][j]==myM[i][j+1]){
++inc_dec;
if(inc_dec!=0 && 1+myM[i][j]!=myM[i][j+1]){
inc_dec=1;
}
}
//printf("%d",inc_dec);
if(inc_dec>c){inc_dec=c;}
if(j-1==c){cnt=inc_dec;}
if(cnt<inc_dec){cnt=inc_dec;}
}
}
printf("\n%d",cnt);
cnt=0; inc_dec=0;
for(int i=0;i<r;i++){
inc_dec=1;
for(int j=0;j<c;j++){
if(myM[i][j]==1+myM[i+1][j]){
++inc_dec;
if(inc_dec!=0 && myM[i][j]!=1+myM[i+1][j]){
inc_dec=1;
}
}
else if(1+myM[i][j]==myM[i+1][j]){
++inc_dec;
if(inc_dec!=0 && 1+myM[i][j]!=myM[i+1][j]){
inc_dec=1;
}
}
//printf("%d",inc_dec);
if(inc_dec>r){inc_dec=r;}
if(i-1==r){cnt=inc_dec;}
if(cnt<inc_dec){cnt=inc_dec;}
}
}
printf("\n%d",cnt);
fclose(fp1);
fclose(fp2);
fclose(fp3);
free2dArray(myM, r);
return 0;
}
int **make2dArray(int rows, int cols){
int **x=NULL, i=0;
x=malloc(rows *sizeof(*x));
for (i=0;i<rows;i++)
x[i] = malloc(cols * sizeof(**x));
return x;}
void free2dArray(int **array, int rows){
int i = 0;
for (i = 0; i < rows; i++) {
free(array[i]);
free(array);
return;
}
}
因此提供了3个文件,但无论如何它必须读取任何类型的2D矩阵 如果矩阵是
3 4 1 2 3 4 1 2 3 5 1 2 3 6如前3和5表示行和列 答案应该是4(第一行是1234)