Problem F: Palindromes _easy version
Description
“迴文串”是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是迴文串。請寫一個程序判斷讀入的字符串是否是“迴文”。
Input
輸入包含多個測試實例,輸入數據的第一行是一個正整數n,表示測試實例的個數,後面緊跟着是n個字符串,每個字符串的長度不超過500。
Output
如果一個字符串是迴文串,則輸出"yes",否則輸出"no".
Sample Input
4
level
abcde
noon
haha
Sample Output
yes
no
yes
no
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int main()
{
int n,m,j,i;
boolp;
char str[500];
scanf("%d\n",&m); //用C語言輸入所需字符串行數
for(j=1;j<=m;j++) //循環輸入字符串
{
{gets(str);
n=strlen(str); //求出字符串長度
for(i=0;i<n/2;i++) //循環判斷對稱位置的字符是否相同
{if(str[i]!=str[n-i-1])
p=0;
elsep=1;}
if(p==1) cout<<"yes"<<endl; //按要求輸出
else cout<<"no"<<endl;
}
}
return 0;
}
題目要求判斷是否爲迴文,即判斷字符串是否對稱,我們只要把字符串裏的每個字符取出來,然後判斷對稱位置的字符是否相同就可以了,只要有一個不相同,就不是迴文,其判斷方法和素數的判斷方法類似,即定義布爾變量(bool p;);
我們先輸入一個數(scanf("%d\n",&m);),以便控制輸入測試數據的個數(for(j=1;j<=m;j++)),然後在循環語句中輸入規定個數的字符串 (gets(str););
求出輸入的字符串的長度(n=strlen(str);),只要判斷前半部分和後半部分相對稱的位置就可以,所以,只循環到中間位置就可以了(for(i=0;i<n/2;i++));迴文是對稱位置都相同,所以,只要有不同的地方(if(str[i]!=str[n-i-1])),就不是迴文,令布爾變量爲假(p=0;),否則(else),纔是迴文,令布爾變量爲真(p=1;);
當判斷爲真時(if(p==1)),輸出yes(cout<<"yes"<<endl;),否則(else),輸出no(cout<<"no"<<endl;).