| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9265 人关注过本帖
标题:program received signal sigsegv的解决办法
只看楼主 加入收藏
f2313660764
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2018-11-14
结帖率:14.29%
收藏
已结贴  问题点数:10 回复次数:4 
program received signal sigsegv的解决办法
#include <stdio.h>
#define N 1000005
#include <math.h>
int main()
{
    int n,m,s1[N],s2[m][2],mid,high,low,i,j,a,b;
    scanf("%d",&n);
    for(i=0;i<n;i++)  scanf("%d",&s1[i]);
    scanf("%d",&m);
    for(i=0;i<m;i++)
    for(j=0;j<2;j++) scanf("%d",&s2[i][j]);//输入两个数组
    for(i=0;i<m;i++)
    {
        for(j=0;j<2;j++)
        {
        high=n-1;
        low=0;
        while(high>=low)
        {
            mid=(low+high)/2;   
            if(s2[i][j]>s1[mid])   
            low=mid+1;
            else if(s2[i][j]<s1[mid])
                high=mid-1;
            else
            {
                if(j==0)a=mid;
                if(j==1)b=mid;
                printf("%d\n",fabs(a-b));
                break;
            }
            
        }
        }
    }                                       //折半查找
    return 0;
}


各位大佬,怎么改
debug的结果program received signal sigsegv
编译运行直接结束

[此贴子已经被作者于2018-12-23 12:32编辑过]

搜索更多相关主题的帖子: program 办法 mid scanf for 
2018-12-23 12:29
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
收藏
得分:10 
你定义了未知长度的数组
2018-12-23 14:37
f2313660764
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2018-11-14
收藏
得分:0 
回复 2楼 豆豆的滴
对对对   
那是之前的代码
 但是改了之后还是不对
好像是数组长度太长的问题   
请问您知道怎么改吗
2018-12-23 23:01
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
收藏
得分:0 
只要把数组的大小定义好就能运行了,但我不知道这代码有什么用,最好看看题目
2018-12-24 12:25
f2313660764
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2018-11-14
收藏
得分:0 
回复 4楼 豆豆的滴
#include <stdio.h>
#include <math.h>
int main()
{
    int mid,high,low,i,j,a,b;
    int a1[1000005],a2[10005][2],m,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)  scanf("%d",&a1[i]);
    scanf("%d",&m);
    for(i=0;i<m;i++)
    for(j=0;j<2;j++) scanf("%d",&a2[i][j]);
    for(i=0;i<m;i++)
    {
        for(j=0;j<2;j++)
        {
        high=n-1;
        low=0;
        while(high>=low)
        {
            mid=(low+high)/2;   
            if(a2[i][j]>a1[mid])   
            low=mid+1;
            else if(a2[i][j]<a1[mid])
                high=mid-1;
            else
            {
                if(j==0)a=mid;
                if(j==1)b=mid;
            
                break;
            }
            
        }
        }
        printf("%d\n",fabs(a-b));
    }
    return 0;
}



题目描述
现在给你一个从小到大排序的集合,定义其中两个元素的距离为它们在集合中的名次之差的绝对值。给你集合中的两个元素,请计算距离。

输入
有多行。第1行是一个数n(10000≤n≤1000000),代表集合中一共有n个数。接下来一行有n个数。这n个数由小到大排列(所有的数都为整型数据,并且没有相等的数)。第3行是一个数m(5000≤m≤10000),代表询问次数。然后有m行,每行两个数,a,b(a,b保证是集合中的元素,所以请不要考虑a,b不在集合中的特殊情况,a和b最大为2000000)表示询问a,b之间的距离。注意数据很大的!!!!

输出
       有m行。每行一个整数,表示每次询问a和b的距离。

上面就是改过之后,还是老问题,下面的是题目。
2018-12-24 16:13
快速回复:program received signal sigsegv的解决办法
数据加载中...
 
   



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

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