日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

回文数、括号匹配(栈操作)

發布時間:2023/12/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回文数、括号匹配(栈操作) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
回文數

“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; }

總結

以上是生活随笔為你收集整理的回文数、括号匹配(栈操作)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。