一世轻尘 发表于 2021-1-4 16:36:19

动态二维数组

哪里不对呢?{:10_269:}
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i,j,N;
    scanf("%d",&N);
    int **p;
    p=(int**)malloc(N*sizeof(int*));
    for(i=0;i<N;i++)
    {
      *(p+i)=(int *)malloc(N*sizeof(int));
    }
    for(i=0;i<N;i++)
    {
      for(j=0;j<N;j++)
      {
            scanf("%d",&p);
      }
    }
    int sum;
    for(i=0,j=N-1;i<N,j>=0;i++,j--)
    {
      sum+=p;
    }
    for(i=0,j=0;i<N,j<N;i++,j++)
    {
      sum+=p;
    }
    sum-=p;
    printf("%d",sum);
    return 0;
}

xieglt 发表于 2021-1-4 16:41:22

sum没有初始化

int sum = 0;

一世轻尘 发表于 2021-1-4 16:51:35

xieglt 发表于 2021-1-4 16:41
sum没有初始化

嗯,不过好像还有一点点问题{:10_282:}

jackz007 发表于 2021-1-4 16:56:16

本帖最后由 jackz007 于 2021-1-4 17:19 编辑

      此题样例输入的输出分明是 30,怎么会是 25 呢?
#include<stdio.h>
#include<stdlib.h>
int main()
{
      int i , j , N , ** p , s                                              ;
      scanf("%d" , & N)                                                   ;
      p = (int **) malloc(N * sizeof(int *))                              ;
      for(i = 0 ; i < N ; i ++) * (p + i) = (int *) malloc(sizeof(int) * N) ;
      for(s = i = 0 ; i < N ; i ++) {
                fflush(stdin)                                                 ;
                for(j = 0 ; j < N ; j ++) scanf("%d" , & p)             ;
                s += p                                                ;
                if(N - 1 - i != i) s += p                     ;
      }
      printf("%d\n" , s)                                                    ;
      for(i = 0 ; i < N ; i ++) free(* (p + i))                           ;
      free(p)                                                               ;
}

xieglt 发表于 2021-1-4 16:57:45

一世轻尘 发表于 2021-1-4 16:51
嗯,不过好像还有一点点问题

没有free内存,造成内存泄露。

一世轻尘 发表于 2021-1-4 16:58:59

jackz007 发表于 2021-1-4 16:56
此题样例输入的输出分明是 30,怎么会是 25 呢?

中间那个数只能用一次,两个对角线重复了

一世轻尘 发表于 2021-1-4 17:01:31

xieglt 发表于 2021-1-4 16:57
没有free内存,造成内存泄露。

还是不行,哎,我已经被它折磨好几天了

一世轻尘 发表于 2021-1-4 17:04:31

xieglt 发表于 2021-1-4 16:57
没有free内存,造成内存泄露。

找到问题了,只有奇数的时候应该吧中间的减去,偶数的时候两对角线没有重复

xieglt 发表于 2021-1-4 17:19:04

for(i=0;i<N;i++)
{
sum += p;
if(i!=N-i-1)
sum+=p;
}

jackz007 发表于 2021-1-4 17:20:51

一世轻尘 发表于 2021-1-4 17:04
找到问题了,只有奇数的时候应该吧中间的减去,偶数的时候两对角线没有重复

   4 楼的代码改了,看看能否过测试平台

一世轻尘 发表于 2021-1-4 17:52:08

jackz007 发表于 2021-1-4 17:20
4 楼的代码改了,看看能否过测试平台

过了过了{:10_298:}
页: [1]
查看完整版本: 动态二维数组