回文数
“xyzyx”是一个回文字符串,所谓回文字符串就是指正读反读均相同的字符序列,如“席主席”、“记书记”、“aha”和“ahaha”均是回文,但“ahah”不是回文。输入一行字符(仅包含小写英文字母a~z)请判断这行字符串是否为回文。
输入格式:
只有一行,仅包含小写英文字母a~z的字符串,长度小于等于100。
输出格式:
只有一行,如果是回文请输出YES,不是回文则输出NO,请注意大小写。
样例 1 :
输入:
ahah
输出:
NO
样例 2 :
输入:
ahaha
输出:
YES
代码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;struct stack//首先定义一个栈
{int data[101];//数据域int top;//栈顶
};int main()
{char a[101];struct stack sq;int i,len,mid,next;gets(a);len=strlen(a);mid=len/2-1;sq.top=0;//初始化栈,栈顶为0for(i=0;i<=mid;i++){//因为是回文数,只需要入栈输入的字符串的一半即可sq.data[++sq.top]=a[i];//入栈}if(len%2==0)//偶数next=mid+1;//左一半入栈,然后与右一半比较else//奇数next=mid+2;//中间那个数不需要入栈,也不需要比较,需要+2,跳过中间那个数for(i=next;i<=len-1;i++){//后一半与栈内前一半元素进行比较if(a[i]!=sq.data[sq.top]){//开始于栈内数据对比,若与栈顶不同,结束即可break;}sq.top--;//若相同,元素出栈,top--指向下一个栈顶元素}if(sq.top==0)//最后的结果若栈内所有元素都出栈表示是回文数printf("YES");elseprintf("NO");return 0;
}
括号匹配
在编程当中我们只会用到三种括号:圆括号(),方括号[]和花括号{},编译器在编译的时候会检查括号是否正确匹配。例如{[()]}、{()[]{}}都是合法的匹配。但是([)]则是不合法的匹配。请编写一个程序来判断输入的括号序列是否合法。
输入格式:
只有一行,为( ) [ ] { }组成的序列,长度不超过100
输出格式:
只有一行,如果是合法匹配则输出YES,不合法则输出NO,请注意大小写
样例 1 :
输入:
{([()]{})}
输出:
YES
代码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;struct stack//定义栈
{int data[101];//数据域int top;//栈顶
};int main()
{char a[101];int i,len,mid,next;struct stack sq;gets(a);len=strlen(a);sq.top=0;if(len%2 != 0){//奇数个,肯定不匹配,直接结束即可printf("NO");return 0;}if(a[0]=='(' || a[0]=='[' || a[0]=='{'){//第一个字符必须是三个左括号之一for(i=0;i<=len-1;i++){if(a[i]=='{' || a[i]=='[' || a[i]=='('){//若为左半括号进行入栈操作sq.data[++sq.top]=a[i];}if(a[i]=='}' || a[i]==']' || a[i]==')'){//若为右半括号开始出栈进行比较if((sq.data[sq.top]=='(' && a[i]==')') || (sq.data[sq.top]=='[' && a[i]==']') || (sq.data[sq.top]=='{' && a[i]=='}') )//左右括号得配对sq.top--;//配对,出栈else//否则不匹配结束break;}}}else{//第一个字符不是三个左括号之一,匹配肯定不成功printf("NO");return 0;}if(sq.top==0)//若栈内元素都出栈,表示匹配成功printf("YES");elseprintf("NO");return 0;
}