所以现在我正在为我的最后一篇文章编写一些代码,它需要你在system.in的一些输入中红色,处理它,第一行总是一个一组数字高达25个数字。接下来是一个N或L,另一个是目标。使用这个输入你必须找到正确的一组操作(+和*),它们使用int值来创建目标。布尔数组和一个简单的方法来尝试每个组合
我正在使用一个布尔数组来跟踪我在非常检查中使用的操作数,但是我不确定如何通过尝试每个不同的操作数来“强制”解决方案,我有代码来检查每个设置但是我不知道是否有一个简单和容易的方法来改变数组[0,0,0,0](0为false)到[0,0,0,1],[0,0, 1,0],[0,0,1,1]等?
我确定有一个非常简单的方法,我忽略了,但对于我的生活,我不确定它是什么atm。
static boolean evlN(int[] input, boolean[]ops, int aim){
boolean run = true, found = false;
int[] used = new int[input.length];
int runs = 0 ,ans = 0;
while(!found && runs < (1 << ops.length)){
//finding all multiplys and doing them first
search:
for(int x = 0; x < ops.length; x++){
if(!ops[x]){
used[x] = input[x] * input[x+1];
//need to stop working out and change the ops
if(used[x] > aim){
run = false;
break;
}
}
}
//once multiplys have been done need to do all the adds
if(run){
for(int x = 0; x < ops.length; x++){
if(ops[x]){
if(used[x] != 0) ans += used[x] + input[x+1];
else if(used[x+1] != 0) ans += input[x] + used[x];
}
if(ans > aim) break;
}
}
if(ans == aim) found = true;
used = new int[input.length];
ans= 0;
runs++;
run = !run;
}
if(found) return true;
else return false;
}
这是即时通讯使用的是什么工作了每一组操作数和数字,我只是试图改变布尔数组蛮力答案
'我有代码来检查每个集合... ...你能告诉我们这个代码吗? –
您可以使用一个位集而不是一个布尔数组,然后递增。 – shmosel
@shmosel你如何使用一个位集?我知道你可以做1 << bitset或者我错了,我不确定,因为我从来没有和他们合作过 – NexMetu