杭電OJ2029迴文串——Palindromes _easy version(C語言解析)

student_hwj發表於2020-11-13

題目地址
Palindromes _easy version
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 71835 Accepted Submission(s): 43244

Problem Description
“迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。請寫一個程式判斷讀入的字串是否是“迴文”。

Input
輸入包含多個測試例項,輸入資料的第一行是一個正整數n,表示測試例項的個數,後面緊跟著是n個字串。

Output
如果一個字串是迴文串,則輸出"yes",否則輸出"no".

Sample Input
4
level
abcde
noon
haha

Sample Output
yes
no
yes
no

這道題,是比較簡單的迴文判斷,判斷迴文,我們可以採取兩天並進的方法來判斷,就是第一個和最後一個比較,第二個和倒數第二的比較,直到比較到前後差距不大於1,即重疊或相鄰,如果中間比較的不相同,直接跳出判斷,這肯定不是迴文串。我是以一個數來做標記,1就是yes,0是no。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void){
	int n,i,j,m,t;
	int *a;                       //儲存判斷結果
	char *s;                      //儲存輸入的字串
	a=(int *)malloc(sizeof(int)*100);
	s=(char *)malloc(sizeof(char)*100);
	while(scanf("%d",&n) != EOF){
		t=0;
		while(n--){
			scanf("%s",s);
			m=strlen(s);
			j=1;                           //t作為標記,1是YES,0是NO
			for(i=0;i<m/2;i++){            //判斷迴文串
				if(s[i] != s[m-1-i]){
					j=0;
					break;
				}
			}
			a[t]=j;
			t++;
		}
		for(i=0;i<t;i++){
			if(a[i]==1){
				printf("yes\n");
			}
			else{
				printf("no\n");
			}
		}
	}
	
	
	return 0;
}

相關文章