ブルーブリッジカップ————コインをひっくり返す問題
ブルーブリッジカップのコイン反転問題 題 構想 1.ポインタ書き込み 2.stringが書いた
タイトル
問題は明ちゃんが「コインをひっくり返す」ゲームをしていることを示しています.
テーブルの上にはいくつかのコインが並んでいる.私たちは*で正面を表し、oで裏面を表します(小文字で、ゼロではありません).
例えば、oo*oooo
左の2つのコインを同時に反転すると、「oooo**oooo」になります.
今の明ちゃんの問題は、初期状態と目標状態が既知で、毎回隣接する2つのコインを同時に反転するしかない場合、特定の局面に対して、少なくとも何回反転しなければならないのだろうか.
隣接する2つのコインをひっくり返すことを一歩操作と呼び、要求します.
初期状態と到達するターゲット状態を表すフォーマットの2行の等長文字列を入力します.1行あたりの長さ<1000
最小操作ステップ数を表す整数を出力します.
サンプル入力1**********(フォーマットに適応するためだけ)o****o****サンプル出力1 5
構想
この問題は考え方を言えば、私は問題を手に入れて直接書いたので、あまり考えていません(しかし、アルゴリズムの効率があまり高くないことは自分で知っています)、だから、神様にもっと良い考えを提供してもらいます(ハハハを吹くな)
1.ポインタ書き
newも使えます.何が使いたいか見てみましょう.
2.stringが書いた
やはり顽张りましょう、最近少し忙しくて、自分の多くの考えも実现していないで、いくつかの小さいプロジェクトを书く时間もなくて、いくつかのすごいアルゴリズムの问题を更新するしかありません、顽张ります!考えたらやる
タイトル
問題は明ちゃんが「コインをひっくり返す」ゲームをしていることを示しています.
テーブルの上にはいくつかのコインが並んでいる.私たちは*で正面を表し、oで裏面を表します(小文字で、ゼロではありません).
例えば、oo*oooo
左の2つのコインを同時に反転すると、「oooo**oooo」になります.
今の明ちゃんの問題は、初期状態と目標状態が既知で、毎回隣接する2つのコインを同時に反転するしかない場合、特定の局面に対して、少なくとも何回反転しなければならないのだろうか.
隣接する2つのコインをひっくり返すことを一歩操作と呼び、要求します.
初期状態と到達するターゲット状態を表すフォーマットの2行の等長文字列を入力します.1行あたりの長さ<1000
最小操作ステップ数を表す整数を出力します.
サンプル入力1**********(フォーマットに適応するためだけ)o****o****サンプル出力1 5
構想
この問題は考え方を言えば、私は問題を手に入れて直接書いたので、あまり考えていません(しかし、アルゴリズムの効率があまり高くないことは自分で知っています)、だから、神様にもっと良い考えを提供してもらいます(ハハハを吹くな)
1.ポインタ書き
#include
#include
#include
#include
#include
using namespace std;
int dfs(int N, char *str, char * str2)
{
int count=0;
for(int i=0;i<N;i++){
if(str[i]==str2[i]){
continue;
}else
{
if(str[i]=='*'){
str[i]='o';
}else{
if(str[i]=='o')
str[i]='*';
}
if(str[i+1]=='*'){
str[i+1]='o';
}else{
if(str[i+1]=='o')
str[i+1]='*';
}
count++;
}
}
return count;
}
int main(){
char* str = (char*)malloc(100*sizeof(char));
char* str2 = (char*)malloc(100*sizeof(char));
cin>>str;
cin>>str2;
int num;
int N = strlen(str);
num=dfs(N,str,str2);
cout<<num;
return 0;
}
newも使えます.何が使いたいか見てみましょう.
2.stringが書いた
#include
#include
#include
#include
#include
using namespace std;
int dfs(int N, string str, string str2)
{
int count=0;
for(int i=0;i<N;i++){
if(str[i]==str2[i]){
continue;
}else
{
if(str[i]=='*'){
str[i]='o';
}else{
if(str[i]=='o')
str[i]='*';
}
if(str[i+1]=='*'){
str[i+1]='o';
}else{
if(str[i+1]=='o')
str[i+1]='*';
}
count++;
}
}
return count;
}
int main(){
string str;
string str2;
cin>>str;
cin>>str2;
int num;
int N = str.size();
num=dfs(N,str,str2);
cout<<num;
return 0;
}
やはり顽张りましょう、最近少し忙しくて、自分の多くの考えも実现していないで、いくつかの小さいプロジェクトを书く时間もなくて、いくつかのすごいアルゴリズムの问题を更新するしかありません、顽张ります!考えたらやる