#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;
int main (void)
{
int z,foo,t,n,k,i;
cin>>t;
while (t--)
{
vector<int> a;
vector<int> b;
cin>>n>>k;
z = n;
while (z--)
{
cin>>foo;
a.push_back(foo);
}
sort(a.begin(),a.end());
vector<int>::iterator it = a.begin();
vector<int>::iterator bt = a.begin();
while (bt != a.end())
{
bt = bt + (k-1);
foo = *bt - *it;
b.push_back(foo);
it++;
}
sort(b.begin(),b.end());
cout<<b[0]<<"\n";
}
return 0;
}
此代码接受测试用例的数量,然后接受两个数字,然后获取数字的总数,并对它们进行排序,根据k
获取它们的差异并对它们进行排序,复制到新的矢量并对它们进行排序并输出一个新元素。
上面的代码给出了分段错误。
答案 0 :(得分:2)
您正在循环的每次迭代中bt
步k - 1
步
bt = bt + (k-1);
bt
的初始值为a.begin()
,周期延续条件为bt != a.end()
。如果a
的大小(即n
)不能被k - 1
整除,bt
将永远不会等于a.end()
,并且循环永远不会正确终止。它会将bt
推出有效范围。
此时行为将是未定义的。代码通常会崩溃。