第IV章再帰アルゴリズム1203:拡張番号のマッチング

1203:拡張された数のマッチング

期限:1000ミリ秒のメモリの制限:65536キロバイト
提出:介して4478番号:2374
タイトル説明
文字列の左括弧、右括弧、および小文字(以上100の長さ)を有し、所定の(と共通任意左括弧)演算式のように内部の外からのものと最も近い閉じ括弧の右側でそれと一致します。マッチングの左右の丸括弧、元の文字列の出力、およびマッチングブレースをマークすることはできません、次の行を見つけることができないプログラムを書きます。「$」マークの付いた左括弧が一致することはできません、あなたはマッチング右括弧「?」マークを使用することはできません。

[INPUT]
入力データの複数のセットを含み、各データ行は、左右のブラケットと小文字ではなく、100以上の文字列を含む文字列を含みます。

[出力]
各グループの出力データを、2本の出力線、最初の行は、元の入力文字、セカンドライン」が含ま " " " 空の グリッド グループ なります " " "?"、そしてスペース。" と「?」に対応する左と右括弧が一致していないことを示します。

[サンプル入力]
((ABCD(X-)
)(rttyy())SSS)(
[サンプル出力]
((ABCD(X-)
$$
)(rttyy())SSS)(
?? $


アイデアは:「?」再帰的な思考は、閉じ括弧マークを一致させることができない、「$」マークが左括弧と一致することはできません

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
char a[101],b[101];

int up(int d)
{
	if(d==-1) return -1;
	else if(b[d]=='$') return  d;
	else return up(d-1);
}
int main(){
	while(scanf("%s",a)!=EOF) 
	{
		printf("%s\n",a);
		int n=strlen(a);
		memset(b,' ',sizeof(b));
		for(int i=0;i<n;i++)
		{
			if(a[i]=='(') b[i]='$';
			else if(a[i]==')')
			{
				int m=up(i-1);
				if(m==-1) b[i]='?';
				else
				b[m]=' ';
				
			}
			
			
		}
		printf("%s\n",b);
		
	}
	
	return 0;
}
公開された108元の記事 ウォンの賞賛2 ビュー2059

おすすめ

転載: blog.csdn.net/zqhf123/article/details/104451657