C ++プログラミング例をコーディング:文字列SとT、S内の任意の文字が最後に移動するたびに、何回それがT Sになることができます

余談Tucaoについて

今日、それは2つのプログラミングの問題ですが、インターネットの巨人は、筆記試験に参加したが、結果はぞっとQAQ〜wuuuuuu
最大の理解は、サポートプログラムへの強固な基盤がないどのように良いアルゴリズムの基礎どんなにが空であることです。
新入生は、C ++を学ぶが、またラインによって彼のクラスベースのコードラインアウトでしたが、時間をかけないで、詳細の多くはそれほど明確ではありません。だから、今日の愛の状態にあると平和が質問を行った後、私は、はっきりとアルゴリズムの実装を考えてコードを演奏し始めたが、それはまた、文法、ベンの崩壊ああの詳細のほとんどを与えられています誤りであることが判明しました!
 


タイトル説明

まあ、まあ、のは、タイトルバーを見てみましょう、そしてホアヒン崩壊を撃墜する期待していなかった、私はそれがこのような何かを必要と繰り返してみました:

Xiaoqiangの名前の男(またはボブや小さな緑)、このような「魔法」のRと同様に文字列が文字列の末尾に変更し、任意の位置にあることができる「魔法」の男が、clroevにすることができ最後に移動し、「魔法」クローバーへの最後のターンに移動clovreの電子置くことができ、clovreになります。さて、S T.には、この「魔法」によって必要な2つの文字列SとTは、あります S Tになっていない場合は、出力は "-1。" SはTの数である場合、出力は「魔法」になることができます使用する必要があります。
 

コードの実装

//  edited by clover ~ ^_^ ~

#include<iostream>
using namespace std;

int main()
{
	string S, T;
	while (1) {
		cin >> S >> T;
		if (S.length() == T.length())
		{
			int num = S.length(), times = 0;
			for (int lastchar = num - 1; lastchar >= 0; --lastchar)
			{
				for (int i = 0; i <= lastchar + 1; ++i)
				{
					//cout << "i=" << i << ",lastchar=" << lastchar << endl;
					if (i == lastchar + 1)
					{
						cout << "-1";
						return 0;
					}
					//cout << "S[i]=" << S[i] << ",T[lastchar]=" << T[lastchar]<<endl;
					if (S[i] == T[lastchar])
					{
						if (i == lastchar)
						{
							//cout << "同位置不用变";
							break;
						}
						char temp = S[i];
						for (int j = i; j < lastchar; ++j)
						{
							S[j] = S[j + 1];
						}
						S[lastchar] = temp;
						++times;
						//cout << "第" << times << "次改变后:" << S << endl;
						break;
					}
					//else cout << "第" << i << "次尝试失败" << endl;
				}
			}

			cout << times<<endl;
		}
		else
		{
			//cout << "length does not match!" << endl;
			cout << "-1"<<endl;
		}
	}
	
}

 


テストと分析

ここに画像を挿入説明

  • 入力文字列の長さが矛盾している場合、直接-1
aaaa
aaa
-1
  • 入力SおよびTは、のような、「魔法」を使用しない場合
aaaa
aaaa
0
  • より一般的なの他の例
haaaaaaaa
aaaaaaaah
1
clover
clorev
2
  • アルゴリズムは、アカウントに例をとりませんでした(あなたは私を許しますバグがまだある、大物も提案最適化アルゴリズムを歓迎した)
    限り、魔法の時間ライン上ではなく、なぜなら、アルゴリズムの最後に最初のシフトは、バックから開始することであるとして、実際には、以下の例のようにモバイル、エラー。
hahahahaha
ahahahahah
5
公開された26元の記事 ウォン称賛32 ビュー10000 +

おすすめ

転載: blog.csdn.net/Clover_pofu/article/details/105141101