2768 - 回文问题
时间限制 : 1 秒
内存限制 : 128 MB
回文判断。回文,正读反读都都相同的字符序列成为回文。例如:abcba就是回文。写程序判断给定的字符串序列是否是回文。
要求:用栈实现,否则不得分。
题目输入
第一行:输入字符串字符个数。
第二行:输入字符串。
提示:输入的时候,在两个输入之间,直接回车的时候,回车符会输入到字符串,这个时候要清空输入缓存,或者用getchar();来消除错误。例如:
scanf(“%d",&n);
getchar();
scanf("%s",ch);
上面如果去掉getchar(),那么输入:3回车 abc 结果为:n=3 ch=“ abc” 第一位是一个空格。导致ch不是所希望的字符串,提交会错误。
题目输出
第一行:输出逆序序列。
第二行:输入1(是回文)或0(不是回文)。
输入/输出样例
输入格式
5 abcba
输出格式
abcba 1
C语言解答
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define stack_size 50 typedef char ElemType; typedef struct { ElemType elem[stack_size]; int top; }seqstack; void Initstack( seqstack * s)//初始化 { s->top =-1; } void push (seqstack *s ,ElemType x )//进栈 { if(s->top == stack_size -1) return ; s->top++; s->elem[s->top]=x; return ; } int pop(seqstack *s, ElemType * x)//出栈 { if(s->top ==-1) return 0; else { *x=s->elem[s->top]; s->top--; return 1; } } void f(seqstack l) { int i; for(i=l.top;i>=0;i--) printf("%c",l.elem[i]); } void main() { int n,i; char a ,b[stack_size]; seqstack h; Initstack(&h); scanf("%d",&n); getchar(); for(i=0;i<n;i++) { scanf("%c",&b[i]); push(&h,b[i]); } f(h); for(i=0;i<n;i++) { pop(&h,&a); if(b[i]!=a) break; } printf("\n"); if(i==n) printf("1"); else printf("0"); printf("\n"); }
C++解答
#include<iostream> #include<string.h> using namespace std; typedef struct { char input[100]; int top; }stick ; int main() { stick s; char x[100]; int n,a; cin>>n; getchar(); for(int i=0;i<n;i++) { s.input[i]='\0'; x[i]='\0'; } for(s.top=0;s.top<n;s.top++) cin>>s.input[s.top]; for(s.top--;s.top!=-1;s.top--) cout<<s.input[s.top]; for(int i=0;i<n;i++) { x[n-i-1]=s.input[i]; } a=strcmp(x,s.input); if(a) a=0; else a=1 ; cout<<endl; cout<<a; getchar(); getchar(); return 0; }