我必须实现一个程序来查找行或列中连续递增(或递减)的数字的最长序列的长度

时间:2019-05-17 18:43:59

标签: c arrays

所以我正在研究这个问题 我应该写一个程序,从给定的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)

0 个答案:

没有答案