我创建了一个模拟拼图的程序。 其中n个开关串联连接(第一个开关的输出连接到第二个输入)。 第一个开关总是有输入电源,最初所有开关都处于关闭状态。 对于每次迭代,如果开关具有输入功率,则切换状态。 如果开关具有输入功率并且其状态为开,则产生输出。 最后有灯泡,我们必须找到它是否发光给定的迭代次数。 我在数学上做了这个,这次我试图刺激。
考虑2个开关的情况
power Switch1 power Switch2 power Bulb
ON OFF OFF OFF OFF OFF
ON ON ON OFF OFF OFF
ON OFF OFF ON OFF OFF
ON ON ON ON ON ON
注意:在第三次迭代状态下,switch2因电源输入而发生了变化。
我的代码在java中给出了正确的输出但在c ++中是错误的 这里是c ++代码
#include<iostream>
using namespace std;
int main(){
int n=2;
int taps=4;
bool ans=false;
bool state[n][taps];//={0};//=new boolean[n][taps];
bool out[n][taps];//={0};//=new boolean[n][taps];
bool power=true;
for(int j=0;j<taps;j++){
for(int i=0;i<n;i++){
state[i][j]=false;
out[i][j]=false;
}
}
for(int j=0;j<taps;j++){
for(int i=0;i<n-1;i++){
if(j>0)
state[0][j] = !state[0][j-1];
out[0][j]=(power && state[0][j]);
if(j>0){
if (out[i][j]==true){
if (out[i][j-1]==false)
state[i+1][j]=state[i+1][j-1];
else
state[i+1][j]= !state[i+1][j-1];
}else if(out[i][j]==false){
if(out[i][j-1]==true)
state[i+1][j]= !state[i+1][j-1];
else
state[i+1][j] = state[i+1][j-1];
}
}else
state[i+1][j]=false;
out[i+1][j]= (state[i+1][j] && out[i][j]);
ans=out[i+1][j];
}
cout<<ans<<endl;
}
if(ans == true)
cout<<"ON"<<endl;
else
cout<<"OFF"<<endl;
}
这是java代码
public class turn {
public static void main(String args[]){
int n=2;
int taps=4;
boolean ans=false;
boolean state[][]=new boolean[n][taps];
boolean out[][]=new boolean[n][taps];
boolean power=true;
for(int j=0;j<taps;j++){
for(int i=0;i<n-1;i++){
if(j>0)
state[0][j] = !state[0][j-1];
out[0][j]=power & state[0][j];
if(j>0){
if (out[i][j]==true){
if (out[i][j-1]==false)
state[i+1][j]=state[i+1][j-1];
else
state[i+1][j]= !state[i+1][j-1];
}else if(out[i][j]==false){
if(out[i][j-1]==true)
state[i+1][j]= !state[i+1][j-1];
else
state[i+1][j] = state[i+1][j-1];
}
}else
state[i+1][j]=false;
out[i+1][j]=state[i+1][j] & out[i][j];
ans=out[i+1][j];
}
System.out.println(ans);
}
if(ans == true)
System.out.println("ON");
else
System.out.println("OFF");
}
}
答案 0 :(得分:1)
这可能是其中之一
out[0][j]=(power && state[0][j]);
&&
是一种逻辑比较,因此如果power
和state[0][j]
为true
,则此代码返回true。您可能希望在此处使用按位运算符&
在这里:
out[i+1][j]= (state[i+1][j] && out[i][j]);