运行时SIGSEV错误

时间:2017-01-06 20:30:59

标签: c++ segmentation-fault

我在执行程序时遇到SIGSEV错误。如果数字按其索引的递增顺序列出,则组A将具有从列表中的第一个数字开始的每个其他一个,并且组B将具有从列表中的第二个数字开始的每个其他一个。但是,要跳过每个案例第二行中指定的某些数字。然后打印出两组的数字。

第一行包含一个整数T≤50,表示要遵循的测试用例数。每个测试用例包含两行。第一行包含两个数n,m满足0≤m≤n≤1000。这里,n是我们运行的最高数,m是要跳过的数的数。第二行包含1和n之间的m个不同整数的列表。这些是要跳过的数字。连续的整数由一个空格分隔。

如: - 输入:

3
6 3
2 4 1
3 2
3 2
8 2
3 8

输出:

3 6
5
1

1 4 6
2 5 7

我的代码完美地运行了这个案例,以及其他访问结束索引的情况,但网站不接受解决方案,并显示指定的错误。 请注意,在这里我试图解决练习编码网站的问题,因此缺乏检查,我是初学者,所以我没有关于矢量等概念的信息。 编译器是GCC14

如果你读了这个大问题并做出回答,请提前致谢!

#include <iostream>
using namespace std;

int main()
{
  long cases, tasks, dones, t_done, i, k = 1;
  cin >> cases;
  for( int j = 0 ; j < cases ; j++ )
  {
    k = 1;
    cin >> tasks >> dones;
    int task[tasks] = {0} ;

    for( i = 0 ; i < dones ; i++ )
    {
        cin >> t_done ;
        task[ t_done - 1 ] = 1 ;
    }

    while(k <= tasks)
    {
        for( ; k <= tasks; k++)
        {
            if( task[k-1] != 1)
            {
                task[k-1] = 2;
                break ;
            }
        }
        k++;

        for( ; k <= tasks; k++)
        {
            if( task[k-1] != 1)
            {
                task[k-1] = 3;
                break ;
            }
        }
        k++;

    }

    for( i = 1 ; i <= tasks ; i++)
    {
        if(task[i-1] == 2)
            cout << i << " ";
    }
    cout << "\n" ;
    for( i = 1 ; i <= tasks ; i++)
    {
        if(task[i-1] == 3)
            cout << i << " ";
    }
    cout << "\n" ;
}
return 0 ;
}

0 个答案:

没有答案