【字符串】密室寻宝
问题 K: 【字符串】密室寻宝
时间限制: 1 Sec 内存限制: 64 MB1 #include <iostream> 2 #include<string> 3 using namespace std; 4 int p,q,a[100],b[100],c[100]; 5 int main() 6 { 7 cin>>p>>q; 8 int cnt1=0,cnt2=0; 9 while(p!=0) 10 { 11 a[cnt1++]=p%2; 12 p/=2; 13 } 14 while(q!=0) 15 { 16 b[cnt2++]=q%2; 17 q/=2; 18 } 19 int cnt=0,ans[100]; 20 for(int i=0;i<8;i++) 21 { 22 c[i]=a[i]&b[i]; 23 if(c[i]==1){ 24 ans[cnt++]=i+1; 25 } 26 } 27 if(cnt<2) 28 { 29 cout<<"0"<<endl; 30 cout<<"Close"<<endl; 31 } 32 else 33 { 34 for(int i=0;i<cnt;i++) 35 { 36 if(i) cout<<" "; 37 cout<<ans[i]; 38 } 39 cout<<endl; 40 cout<<"Open"<<endl; 41 } 42 // cout << "Hello world!" << endl; 43 return 0; 44
提交: 4 解决: 3
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
哈利・波特不经意间进入了一座古墓,古墓入口有一道大门,内部有六个密室,每个密室中藏有一件兵器。已知需要两个密码才能从里面打开密室和大门,取出密室内的兵器后从大门撤出。
两个密码均是不大于63的十进制整数,将其转化为八位二进制数后对应位进行“与”运算(运算的规则是:当两个位均为“1”时,结果为“1”,否则结果为“0”)。将“与”运算的结果从右往左数,当第n位为1时,表示可以打开第n个密室,取出其中的兵器;只有当取到至少两件兵器时,方可打开大门撤出。
现在哈利・波特任意给你两个密码,请你帮他设计一个程序,算算可以从哪些密室取出兵器,并可否从大门撤出。
两个密码均是不大于63的十进制整数,将其转化为八位二进制数后对应位进行“与”运算(运算的规则是:当两个位均为“1”时,结果为“1”,否则结果为“0”)。将“与”运算的结果从右往左数,当第n位为1时,表示可以打开第n个密室,取出其中的兵器;只有当取到至少两件兵器时,方可打开大门撤出。
现在哈利・波特任意给你两个密码,请你帮他设计一个程序,算算可以从哪些密室取出兵器,并可否从大门撤出。
输入
第1行输入第一个密码P;
第2行输入第二个密码Q。
第2行输入第二个密码Q。
输出
第1行:按从小到大的顺序输出可以打开密室的编号。若没有可以打开的密室,则输出“0”;
第2行:若可打开大门,则输出为“Open”,否则输出“Close”。
第2行:若可打开大门,则输出为“Open”,否则输出“Close”。
样例输入
2
5
样例输出
0
Close
根据题目意思,直接写即可!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include<string> 3 using namespace std; 4 int p,q,a[100],b[100],c[100]; 5 int main() 6 { 7 cin>>p>>q; 8 int cnt1=0,cnt2=0; 9 while(p!=0) 10 { 11 a[cnt1++]=p%2; 12 p/=2; 13 } 14 while(q!=0) 15 { 16 b[cnt2++]=q%2; 17 q/=2; 18 } 19 int cnt=0,ans[100]; 20 for(int i=0;i<8;i++) 21 { 22 c[i]=a[i]&b[i]; 23 if(c[i]==1){ 24 ans[cnt++]=i+1; 25 } 26 } 27 if(cnt<2) 28 { 29 cout<<"0"<<endl; 30 cout<<"Close"<<endl; 31 } 32 else 33 { 34 for(int i=0;i<cnt;i++) 35 { 36 if(i) cout<<" "; 37 cout<<ans[i]; 38 } 39 cout<<endl; 40 cout<<"Open"<<endl; 41 } 42 // cout << "Hello world!" << endl; 43 return 0; 44 }
如有错误,请指正,感谢!