`
蒙面考拉
  • 浏览: 160573 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

括号对齐问题

 
阅读更多

解法一:左右括号成一对则抵消

             可以将左括号看成1右括号看成 -1,然后对8个数进行全排列

             对每个排列判断,是否符合条件,逐个相加,sum>=0直到遍历完该序列,

             符合条件则count++

             如果出现sum<0则失败

解法二:采用八位bit,从0000 0000 1111 1111遍历,遇到0 -1遇到1 1

           如果加完该序列所有位等于0,且递加过程中sum始终大于零则符合条件

#include<iostream>
#include <vector>
using namespace std ;
void Print(vector<char> v)
{
	for (vector<char>::iterator beg=v.begin();beg!=v.end();++beg)
		cout<<*beg<<" ";
	cout<<endl;
}
void MatchNums(int nSize,int nLen,vector<char> &v)
{
	int nLeftBrackets=0;
	int nRightBrackets=0;
	for (vector<char>::iterator beg=v.begin();beg!=v.end();++beg)
	{
		if(*beg=='(')
			nLeftBrackets++;
		else
			nRightBrackets++;
		if(nRightBrackets>nLeftBrackets)
			return;
		if(nLeftBrackets+nRightBrackets==nSize&&nLeftBrackets==nRightBrackets)
			Print(v);
	}
	
	if (nLen>0)
	{
		v.push_back('(');
		MatchNums(nSize,nLen-1,v);
		v.pop_back();
		v.push_back(')');
		MatchNums(nSize,nLen-1,v);
		v.pop_back();
	}
}
int main()
{
	vector <char> v;
	int n=4;
	MatchNums(n,n,v);
	return 1;
}

 

 

 

可能单独看代码会感觉很难理解,毕竟里面使用了递归,不要紧,其实代码的含义十分的简单,要快速理解它我们需要明确以下几点原则:
      1、我们将一对括号分为单独的两部分:左括号和右括号。然后从0个开始一个一个添加左括号或右括号。
      2、为使括号组合都是合理的,第一个添加的必须是左括号,最后一个添加的必须是右括号。

 

 

#include <iostream> 
#include <string> 
using namespace std; 
void bracketMatch(string bracketString,int left,int right){
if(right==0){
   cout<<bracketString<<endl;
   return;
}
else             /*可通过在左括号添加语句前对连续出现左括号的个数的判断来决定下面的左括号添加操作是否执行以控制括号嵌套的深度*/
   if(left==right){    //此时只能添加左括号
      bracketString+="<";     
     bracketMatch(bracketString,--left,right);
     }
     else
    if(left<right&&left>0){    //此时可以有添加左括号或右括号两种情况
          string temp=bracketString;
         bracketString+="<";
         bracketMatch(bracketString,--left,right);
         left++;
         temp+=">";
           bracketMatch(temp,left,--right);
         }
         else
     if(left==0){      //只能添加右括号了
              bracketString+=">";
              bracketMatch(bracketString,left,--right);
             }
}
int main(){
string s;
int num;
cout<<"请输入括号的对数:"<<endl;
while(cin>>num){
   s="";
   cout<<"所有合理的括号匹配形式为:"<<endl;
     bracketMatch(s,num,num);
}
return 0;
}

 

#include <iostream>
#include <math.h>
using namespace std;
void MatchNums(int a[],int n){
	int num=pow((double)2,n);
	for(int i=0;i<num;++i){
		int sum=0;
		bool signal=true;
		int j=i;
		int count=n-1;
		while(count>=0){
			if((j%2)==1){
				a[count]=1;
				j=j>>1;
			}
			else{
				a[count]=-1;
				j=j>>1;
			}
			--count;
		}
		for(int k=0;k<n;k++){
			sum+=a[k];
			if(sum<0){
				signal=false;
				break;				
			}
		}
		if((sum!=0)&&signal)
			signal=false;
		if(signal){
			for(int k=0;k<n;k++){
				if(a[k]==1)
					cout<<"(";
				else
					cout<<")";
			}
			cout<<endl;
		}
	}
}
int main(){
	int a[8];
	int n=8;
	MatchNums(a,n);
	system("pause");
	return 1;
}

  

分享到:
评论

相关推荐

    vs2010括号虚线对齐

    为了帮助程序员更好地组织代码,有一种名为"括号虚线对齐"的功能,它可以使得代码中的括号对齐,提高代码的视觉效果。 标题中的"vs2010括号虚线对齐"指的是在VS2010中,通过某种方式或插件实现了括号之间的虚线对齐...

    eclipse括号对齐插件(2016-03版)

    Eclipse是一款广泛使用的Java开发集成环境,而"eclipse括号对齐插件(2016-03版)"是专门为Eclipse设计的一款增强工具,旨在提高代码可读性和美观性。这款插件借鉴了Visual Studio(VS)中的功能,为用户提供了类似的...

    小括号虚线对齐 - VS2010插件IndentGuide

    Visual Studio 2010作为一款强大的集成开发环境(IDE),提供了丰富的插件来增强其功能,IndentGuide就是其中的一个例子,旨在帮助程序员更好地对齐代码中的括号,从而提高代码的可读性。 IndentGuide是一款针对...

    Delphi代码对齐工具

    2. **括号对齐**:确保代码中的括号(如if、for、while等)与相应的语句对齐,提高代码结构的清晰度。 3. **关键字对齐**:将相似的关键字(如var、const、function等)对齐,使代码看起来更加整齐。 4. **注释...

    xcode 自动对齐插件

    4. 按括号对齐:括号内的内容可以进行对齐,提升代码的层次感。 此外,XAlign还支持自定义对齐规则,这意味着开发者可以根据自己的编程风格和团队规范进行个性化设置。通过这些功能,Xcode的开发体验将更加接近...

    delphi 代码对齐工具

    1. **括号对齐**:自动对齐函数调用、条件语句、循环语句等中的括号,使代码的结构清晰可见。 2. **等号对齐**:在赋值语句中,将等号对齐,便于一眼看出变量的赋值关系。 3. **缩进调整**:根据用户设定的缩进规则...

    离线版eclispe辅助对齐虚线插件

    eclispe辅助对齐虚线插件,内附安装教程离线安装超详细

    eclipse中增加对齐虚线

    在Eclipse这款强大的Java开发集成环境中,为了提升代码的可读性和美观性,开发者往往希望在编辑器中实现代码的对齐功能。"eclipse中增加对齐虚线"这一主题,就是关于如何在Eclipse中引入代码对齐辅助线,也称为...

    VS2012行虚线对齐工具

    标题中的“VS2012行虚线对齐工具”指的是Visual Studio 2012中的一款插件,用于帮助程序员在编写代码时保持代码的对齐和整洁。这款插件通常被称为Indent Guide,它通过在代码编辑器中显示虚线来指示每一级缩进,使得...

    eclipse 虚线对齐插件

    Eclipse虚线对齐插件则弥补了这一空白,它能够自动显示虚线指示符,显示代码元素之间的相对位置,使得观察和修正对齐问题变得直观而快速。 插件的安装过程相对简单,首先需要在Eclipse的“帮助”菜单中选择...

    vs代码对齐插件.zip

    只需轻轻一点,就能将原本错乱的括号对齐得整整齐齐,让代码看起来如同艺术品般规整。 插件的使用方法十分简单。首先,你需要在VS Code的扩展市场搜索"VS代码对齐插件",找到相应的插件并安装。安装完成后,重启VS ...

    vba自动对齐工具

    使用VBA自动对齐工具,开发人员可以提高工作效率,减少因格式问题引发的错误,同时也让代码审查变得更加轻松。配合压缩包中的"VBA-自动缩进工具",用户只需按照说明运行程序,即可实现快速的代码格式化,提升编程...

    AStyle (keil代码自动对齐工具)

    1. **代码对齐**:AStyle可以自动调整代码中的括号、运算符、注释等元素的对齐方式,使其符合特定的代码规范。 2. **缩进处理**:它可以将代码中的缩进设置为使用空格或者制表符,并且可以调整缩进的宽度,以适应...

    内存对齐问题的完美解释.docx

    内存对齐问题的完美解释 在本文中,我们将深入探讨 C 语言中的 sizeof 操作符,解释其概念、使用方法、结果类型、与其他操作符的关系及其主要用途,并以实际示例来展示 sizeof 的应用。 一、sizeof 概念 sizeof ...

    vs中各种好用的插件,有番茄助手,自动对齐小工具等

    此插件可以自动检测并调整代码中的括号、引号、变量声明等元素的位置,使得代码看起来更加规整,减少人为排版错误。 除了这两个插件,VS2015生态系统中还有许多其他值得一提的插件: 1. **Resharper**:这是一个...

    VBA代码自动对齐工具

    2. **括号匹配**:自动对齐函数、循环、条件语句等的括号,使得代码块更加容易识别。这对处理复杂的嵌套结构尤其有帮助。 3. **行尾对齐**:将相同类型的语句(如赋值、声明或调用)的末尾对齐,使得代码看起来整齐...

    vscode在大括号中回车不自动换行缩进的解决方法(一招解决)

    默认情况下,当我们在大括号内部敲击回车键时,编辑器应该会自动创建一个新的缩进行,以便于保持代码的整洁和对齐。然而,当这个功能失效时,通常是因为用户的设置出现了异常。 解决问题的第一步是打开 VSCode 的...

    SELECT 语句对齐工具

    2. **括号对齐**:确保括号成对出现且位置正确,这对于多层嵌套的查询尤其有用。 3. **逗号间距**:保持逗号与其他元素之间的间距一致,增加代码的整洁度。 4. **注释整理**:将注释与代码分离,使其清晰易读。 5. *...

    eclipse代码对齐插件

    这个插件,通常被称为Indent Guide或Vertical Ruler,能够帮助开发者更好地对齐代码中的各种元素,如括号、语句和注释,使得代码结构更加清晰,便于阅读和维护。 Indent Guide插件的功能主要体现在以下几个方面: ...

    eclispe虚线对齐插件

    这种对齐方式通常被称为“虚线引导”,它会在代码中显示虚线,以便于程序员快速定位和调整对齐的元素,如变量、括号或等号。 虚线对齐插件——atlanto-IndentGuide-c4c145c,是Eclipse插件的一种,它的主要功能是在...

Global site tag (gtag.js) - Google Analytics