L 1-4チャンピオンマジック(10点)2020/11/15エレベーターシミュレーション問題_C言語_二つの方法


2018年FISM(世界マジック大会)近景総優勝のジェーン・レンティンの演技には、デスクトップのテープを境に、テープの片側から反対側にカードを押すと、カードがコインになるというストーリーがあった.コインを反対側に押し戻すとカードになります.ここではカードが等量のコインになり、コインがカードになるとカードの数が倍になると仮定します.では、カードの初期数を指定して、N回押した後、手に持っているのはカードですか、コインですか.数量はいくらですか.入力フォーマット:1行に2つの正の整数を入力します.それぞれカードの初期数とマジシャンがプッシュした回数です.ここでは初期状態でマジシャンの手にカードがいっぱいあると仮定します.出力フォーマット:最後にマジシャンの手にカードがあれば、0とカードの数を出力します.硬貨の場合、1と硬貨の数を出力します.数字の間には1つのスペースが必要です.タイトル保証結果の数値は整数範囲(すなわち2 31−1)を超えない.サンプル1を入力:
3 7
出力サンプル1:
1 24
入力サンプル2:
8 4
出力サンプル2:
0 32
解法一
#include
#include
using namespace std;
int main()
{
     
	int cnt,time;
	cin>>cnt>>time;
	for(int i=1;i<=time;i++)
	{
     
		if(i%2==0) // i!!
			cnt=cnt*2; 
	}
	if(time%2==0) 
		cout<<'0'<<" "<<cnt;
	else cout<<'1'<<" "<<cnt;
	return 0;
}

以下は出力方式の簡単な方法です
#include
#include
using namespace std;
int main()
{
     
	int cnt,time;
	cin>>cnt>>time;
	for(int i=1;i<=time;i++)
	{
     
		if(i%2==0) // i!!
			cnt=cnt*2; 
	}
	cout<<time%2<<" "<<cnt;//
	return 0;
}

超すごい解法二位演算
#include
using namespace std;
int main() {
     
    int a, b;
    cin>>a>>b;
    a<<=(b>>1);
    cout<<(b&1)<<" "<<a<<endl;
    return 0;
}

自分に注意して
  • 入力データの大きな問題に遭遇した場合、cin coutを使用しないでください.scanfより何倍も長いのでタイムアウトの問題が発生します.