2768 - 回文问题

通过次数

0

提交次数

0

时间限制 : 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;
	
}