我有4个整数变量 - x,y,z,t可以从整数值[a,b]的区间中获取值(区间是a,a + 1,a + 2,..., b)。
我想使用以下规则设置不同{x,y,z,t}值的向量:
如果存在至少一个四重值,则两个四重奏(x和y)不相等:xi!= yi(i是{x,y,z,t}值位置之一)。
我目前的解决方案非常耗时:
struct gim
{
int xx;
int yy;
int zz;
int tt;
}
vector<gim> v;
x=a;y=a;z=a;t=a;
nr_quartet=0;
gim g;
while(x<=b)
{
while(y<=b)
{
while(z<=b)
{
while(t<=b)
{
if(at least one of x,y,z,t is different)
{
nr_quartet++;
g.xx=x;
g.yy=y;
g.zz=z;
g.tt=t;
v.push_back(g);
cout << x << " " << y << " " << z << " " << t << "\n";
}
t++;
}
z++;
}
y++;
}
x++;
}
答案 0 :(得分:1)
您可以尝试这样的事情:
int actual_t = t;
int actual_z = z;
int actual_y = y;
int actual_x = x;
while(t<=b && z <=b && y<=b && x<=b)
{
if(at least one of x,y,z,t is different)
{
nr_quartet++;
v.emplace_back(x, y, z, t);
//cout << x << " " << y << " " << z << " " << t << "\n";
}
// For t
if(t==b)
{
t = 0;
}
else
{
t++;
}
actual_t = t;
// For z
if(z==b)
{
z = 0;
}
else if(/* incrementation condition for z */)
{
z++;
}
actual_z = z;
/* the same for y and x */
}
答案 1 :(得分:0)
如果您只需要集合{(x,y,z,t) | ¬(x = y = z = t)}
的元素数量,那么请计算(b-a)**4 - (b-a)
;即无需迭代所有这些。
如果你真的需要用vector
填充所有组合,那么你必须迭代才能将它们全部添加。最长的部分是std::vector
内的内存分配,所以预先{ - 3}}或前 - reserve
包含元素数量,因为您可以事先知道它。
据我所知,这是耗费大量时间的事情
你的意思是消耗了很多时间?你的[a, b]
范围是什么?