C. 2.4.1密室尋寶解答
題目:
時間限制:1s 空間限制:256MB 輸入檔案:find.in 輸出檔案:find.out
當前24小時內您還剩29次提交本題的機會
描述
提交
解題討論區
自定義測驗
回傳
題目描述
哈利?波特不經意間進入了一座古墓,古墓入口有一道大門,內部有六個密室,每個密室中藏有一件兵器。已知需要兩個密碼才能從里面打開密室和大門,取出密室內的兵器后從大門撤出。
兩個密碼均是不大于63的十進制整數,將其轉化為八位二進制數后對應位進行“與”運算(運算的規則是:當兩個位均為“1”時,結果為“1”,否則結果為“0”)。將“與”運算的結果從右往左數,當第n位為1時,表示可以打開第n個密室,取出其中的兵器;只有當取到至少兩件兵器時,方可打開大門撤出。
現在哈利?波特任意給你兩個密碼,請你幫他設計一個程式,算算可以從哪些密室取出兵器,并可否從大門撤出。
輸入格式
第1行輸入第一個密碼P;
第2行輸入第二個密碼Q。
輸出格式
第1行:按從小到大的順序輸出可以打開密室的編號。若沒有可以打開的密室,則輸出“0”;
第2行:若可打開大門,則輸出為“Open”,否則輸出“Close”。
樣例資料
input
2
5
output
0
Close
時間限制:1s
空間限制:256MB
題目分析:
【第一框】輸入
cin>>a>>b;
輸入大家應該都會吧,那我們來看下一筐;
【第二框】轉進制
for(int i=1;i<=6;i++)
{
x[i]=a%2;
a/=2;
y[i]=b%2;
b/=2;
}
二進制使用的大除法,除完以后需要倒著寫;
【第三框】與運算
for(int i=1;i<=6;i++)
{
if(x[i]==1&&y[i]==1)
{
k[i]=1;
}
else
{
k[i]=0;
}
}
只需照著運算方法進行;
【第四框】判斷
for(int i=1;i<=6;++i)
{
if(k[i]==1){cout<<i<<' ';++n;}
}
判斷是根據i的變化而變化的;
注意此處i為前自增;
【第五框】輸出
if(n==0)cout<<0<<endl;
else cout<<endl;
if(n>=2)cout<<"Open"<<endl;
else cout<<"Close"<<endl;
按要求輸出即可;
此處要加if陳述句判定n的大小;
【第六框】完整代碼
#include<bits/stdc++.h>
using namespace std;
int a,b;
int x[9],y[9];
int k[9];
int m[7],n=0;
int s=0;
int u=0;
int main()
{
freopen("find.in","r",stdin);
freopen("find.out","w",stdout);
cin>>a>>b;
for(int i=1;i<=6;i++)
{
x[i]=a%2;
a/=2;
y[i]=b%2;
b/=2;
}
for(int i=1;i<=6;i++)
{
if(x[i]==1&&y[i]==1)
{
k[i]=1;
}
else
{
k[i]=0;
}
}
for(int i=1;i<=6;++i)
{
if(k[i]==1){cout<<i<<' ';++n;}
}
if(n==0)cout<<0<<endl;
else cout<<endl;
if(n>=2)cout<<"Open"<<endl;
else cout<<"Close"<<endl;
return 0;
}
此題主要考查進制運算,請好好體會。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/268500.html
標籤:C++ 語言
