标题:oj的题求解
只看楼主
crowlsx
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2016-12-26
结帖率:0
 问题点数:0 回复次数:10 
oj的题求解

对角线元素和
Description
从键盘输入一个整数n,然后输入n*n个数据建立一个方阵,计算并输出方阵主对角线元素的和。


Input
先输入一个整数n表示方阵的维数。接着输入n*n个数据形成一个方阵


Output
方阵主对角线元素之和。
搜索更多相关主题的帖子: 对角线 键盘 元素 
2017-01-22 16:20
crowlsx
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2016-12-26
得分:0 
我写的显示运行超时 求解
#include<stdio.h>

int main()
{
    int n,i,j,sum=0,a[1000][1000];
   
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);
        sum+=a[i][i];
    }
    printf("%d\n",sum);
   
    return 0;
}
2017-01-22 16:21
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
你确定不是WA?

如果是超时,我怀疑是数组越界,用这个代码试试

程序代码:
#include <stdio.h>

int main()
{
    int n, i, j, t, sum = 0;

    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", &t);
            if (i == j) sum += t;
        }
    }
    printf("%d\n", sum);

    return 0;
}


[此贴子已经被作者于2017-1-22 19:32编辑过]



[fly]存在即是合理[/fly]
2017-01-22 16:39
crowlsx
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2016-12-26
得分:0 
回复 3楼 azzbcc
恩恩 对了
谢谢
可以的话能给我讲一下一般越界的原因吗?
2017-01-22 16:46
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
你定义的是1000个嘛,如果超过 1000 个呢?会访问到未知的空间。

而VC6.0 的变量所在栈空间就是连续的,假设是VC的话,会依次访问sum、j、i、n,循环变量改变,或许就会死循环,也就Time Limit Exceeded了

这道题TLE的原因不清楚,给出的信息也少,并不一定是这个原因。

还有可能是 int a[1000][1000] 申请的空间太大,栈空间不够,理论上会报STACK OVERFLLOW,但是oj嘛,报错并不一定准确,误报TLE也说不准。


[fly]存在即是合理[/fly]
2017-01-22 17:31
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
#include <stdio.h>
int main(void)
{
    int n,i,j;

    scanf("%d",&n);
    int a[n][n];

    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
             scanf("%d",&a[i][j]);

    for(i = 0,j = 0; i < n;i++)
        j += a[i][i];

    printf("%d",j);
    return 0;
}

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-01-22 18:59
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
得分:0 
回复 6楼 renkejun1942
虽然C99允许声明的数组元素用变量表示,但是有的编译器会报错,应该尽量避免。。

Code is my life.
2017-01-22 21:19
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
得分:0 
a[10][10]就行

我是硬件工程师
2017-01-22 21:27
qdcs
Rank: 6Rank: 6
等 级:侠之大者
威 望:5
帖 子:171
专家分:458
注 册:2016-12-22
得分:0 
以下是引用renkejun1942在2017-1-22 18:59:58的发言:

#include  
int main(void)
{
    int n,i,j;
 
    scanf("%d",&n);
    int a[n][n];
 
    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
             scanf("%d",&a[j]);
 
    for(i = 0,j = 0; i < n;i++)
        j += a;
 
    printf("%d",j);
    return 0;
}
a[n][n]是违法的

我是硬件工程师
2017-01-22 22:33
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 9楼 qdcs
那说明你的编译器不支持变长数组。
用3楼的方法咯。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-01-22 23:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473772-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.367931 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved