java和c+中的类似程序+;不同产量
我创建了一个程序来模拟一个谜题。 其中n个开关串联连接(第一个开关的输出连接到第二个开关的输入)。 第一个开关始终有输入电源,最初所有开关都处于关闭状态。 对于每个迭代,若开关有输入电源,它将切换状态。 若开关有输入电源且其状态为on,则产生输出。 在末端有一个灯泡,我们必须找出它是否在给定的迭代次数下发光。 我用数学的方法做了这件事,这次我试着去刺激 考虑两个开关的情况java和c+中的类似程序+;不同产量,java,c++,Java,C++,我创建了一个程序来模拟一个谜题。 其中n个开关串联连接(第一个开关的输出连接到第二个开关的输入)。 第一个开关始终有输入电源,最初所有开关都处于关闭状态。 对于每个迭代,若开关有输入电源,它将切换状态。 若开关有输入电源且其状态为on,则产生输出。 在末端有一个灯泡,我们必须找出它是否在给定的迭代次数下发光。 我用数学的方法做了这件事,这次我试着去刺激 考虑两个开关的情况 power Switch1 power Switch2 power Bulb ON OFF
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
注:在第三次迭代中,开关2的状态发生了变化,因为它有电源输入
我的代码在java中给出正确的输出,但是C++中出错
下面是C++代码< /p>
#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;
}
#包括
使用名称空间std;
int main(){
int n=2;
int-taps=4;
布尔ans=假;
布尔状态[n][taps];//={0};//=新布尔值[n][taps];
bool out[n][taps];//={0};//=new boolean[n][taps];
布尔功率=真;
对于(int j=0;j而言,这可能是其中之一
out[0][j]=(power && state[0][j]);
&
是一种逻辑比较,因此如果power
和state[0][j]
为true
,则此代码返回true。您可能希望在此处使用位运算符&
在这里:
out[i+1][j]= (state[i+1][j] && out[i][j]);
我的上帝,它满是括号!<代码> BoOL状态[n] [TAPS]; C++中的NOP。C++中的输出是什么?代码中的哪一点数据开始不同?(是的,我很懒惰)做了文件比较:&是错误的两倍(只有两个发生的& &)
out[i+1][j]= (state[i+1][j] && out[i][j]);