問題のP2755ソリューション[問題]シャッフル

これは私の問題への最初のソリューションです

多くのことを許してください。

質問は、実際には配列を使用していません

n = 3の場合で見てみましょう:

オリジナル:
123 456

4 1 5 2 6 3

2 4 6 1 3 5

1 2 3 4 5 6

私たちは、観察位置に行ってきました2

第一の位置:2

第二の位置:4

第三位:1

あなたが直接2によって、私たちは4の2の倍数で見つかったことができるように2は、カードスタックの最初の半分であるため、

後半スタックカード4は、その後* 2をその位置(4-3)を見つける--4-3上述した第1のカードに対応し、リアカードの前方にどの対応するカードであることが判明しました位置は-1、それゆえ、それは私のアプローチは権利であるので、私たちは1であることが判明した回数、確かに正解である(4-3)2-1 *です

私たちは、このプログラムを実行します

私は、このようなA式に来て、シミュレートするために使用しました

if(i>n)i=(i-n)*2-1;//如果它在后半堆,找到它对应的前面的牌,算出它对应的前面的牌的位置,再-1
else i=i*2;//如果它在前半堆,直接乘以2

だから、ACコード

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,i=1,s=0;//只要第1张牌回到了初始位,整付牌就回到了初始状态
    cin>>n;//读入
    do{
    	if(i>n)i=(i-n)*2-1;//如果它在后半堆,找到它对应的前面的牌,算出它对应的前面的牌的位置,再-1
    	else i=i*2;//如果它在前半堆,直接乘以2
		s++;
	}while(i!=1);
	cout<<s;
    return 0;
}
公開された41元の記事 ウォン称賛61 ビュー617

おすすめ

転載: blog.csdn.net/qq_46230164/article/details/105318593