我在执行程序时遇到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 ;
}