回文數
“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;
}