d********w 发帖数: 363 | 1 problem: Enumerate points that satisfy the following constraints in 3
dimensions:
1. x + y + z = 1
2. 0 <= x, y, z <= 1
3. x, y and z are multiples of a given increment between 0-1
Example:
increment = 0.5
x y z
-------------
0 0 1
0 .5 .5
0 1 0
.5 0 .5
.5 .5 0
1 0 0 |
C***U 发帖数: 2406 | 2 increment = 0.3怎么办?
x y z怎么取啊
举个例子?
【在 d********w 的大作中提到】 : problem: Enumerate points that satisfy the following constraints in 3 : dimensions: : 1. x + y + z = 1 : 2. 0 <= x, y, z <= 1 : 3. x, y and z are multiples of a given increment between 0-1 : Example: : increment = 0.5 : x y z : ------------- : 0 0 1
|
p*****2 发帖数: 21240 | 3
就是两重循环吧?
【在 C***U 的大作中提到】 : increment = 0.3怎么办? : x y z怎么取啊 : 举个例子?
|
d********w 发帖数: 363 | 4 哦,他当时说不会0。3的情况,肯定是可以凑到1的
【在 C***U 的大作中提到】 : increment = 0.3怎么办? : x y z怎么取啊 : 举个例子?
|
d********w 发帖数: 363 | 5 嗯,我写个2层循环的,你写个递归的吧;)
set> sol(float increment)
{
if (increment <=0 )
return null;
int res = (int)(1/increment);
if (abs(res * increment -1 ) > 0.000001)
return null;
set> triplets;
vector triplet(3);
for (int i =0; i <= 1; i+= increment) {
int total_left = 1 - i;
triplet[0] = i;
for (int j=0; j<=total_left; j+=increment) {
triplet[1] = j;
triplet[2] = total_left - j;
triplets.insert(triplet);
}
}
return triplets;
}
【在 p*****2 的大作中提到】 : : 就是两重循环吧?
|
d********w 发帖数: 363 | 6 扩展到n个数,
set> sol(float increment, int dim) {
set> triplets;
sol(1, increment, dim, new vector(), triplets);
return triplets;
}
void sol(float total, float increment, int dim, vector triplet, set<
vector> triplets) {
if (dim == 0) {
triplets.insert(triplet);
return ;
}
for (int i =0; i <= total; i+= increment) {
triplet.append(i);
sol(total - i, increment, dim -1, triplet, triplets);
triplet.delete(i);
}
}
【在 d********w 的大作中提到】 : 嗯,我写个2层循环的,你写个递归的吧;) : set> sol(float increment) : { : if (increment <=0 ) : return null; : : int res = (int)(1/increment); : if (abs(res * increment -1 ) > 0.000001) : return null; :
|
c*****e 发帖数: 737 | 7 C(n, 3)么,n = 1/increment,然后遍历一遍找出所有的解。这和increment为多少没
关系,只要有结果就输出就可以了。
【在 d********w 的大作中提到】 : problem: Enumerate points that satisfy the following constraints in 3 : dimensions: : 1. x + y + z = 1 : 2. 0 <= x, y, z <= 1 : 3. x, y and z are multiples of a given increment between 0-1 : Example: : increment = 0.5 : x y z : ------------- : 0 0 1
|
C***U 发帖数: 2406 | 8 我也是这么想的 所以我才问0.3 因为必须得到一个整数才能这么做
【在 c*****e 的大作中提到】 : C(n, 3)么,n = 1/increment,然后遍历一遍找出所有的解。这和increment为多少没 : 关系,只要有结果就输出就可以了。
|
H***e 发帖数: 476 | 9 //assume inputs is friendly
public void incrementPrint(double inc){
for(int i = 0; i <= 1/inc; i++){
for(int j = 0; j <= 1/inc; j++){
double result = 1-i*inc -j*inc;
if(((int)(result/inc))*inc ==result && result>=0){
System.out.println(i*inc+" "+ j*inc+" " + (1-i*inc-j*inc
));
}
}
}
}
【在 d********w 的大作中提到】 : problem: Enumerate points that satisfy the following constraints in 3 : dimensions: : 1. x + y + z = 1 : 2. 0 <= x, y, z <= 1 : 3. x, y and z are multiples of a given increment between 0-1 : Example: : increment = 0.5 : x y z : ------------- : 0 0 1
|
l*****a 发帖数: 14598 | 10 如果不允许用set,你如何去重
【在 d********w 的大作中提到】 : 嗯,我写个2层循环的,你写个递归的吧;) : set> sol(float increment) : { : if (increment <=0 ) : return null; : : int res = (int)(1/increment); : if (abs(res * increment -1 ) > 0.000001) : return null; :
|
l*****a 发帖数: 14598 | 11 这题不错
开始还以为跟数学挂钩
后来发现是个排列组合题目
【在 d********w 的大作中提到】 : problem: Enumerate points that satisfy the following constraints in 3 : dimensions: : 1. x + y + z = 1 : 2. 0 <= x, y, z <= 1 : 3. x, y and z are multiples of a given increment between 0-1 : Example: : increment = 0.5 : x y z : ------------- : 0 0 1
|