回文算法c
❶ 回文(栈和队列)(c语言)
#include <stdio.h>
void main( )
{
char str[100], queue[100], stack[100], top = -1, front = 0, rear = 0, i;
int IsHuiwen = 1;
gets(str);
for(i = 0; str[i] != '\0'; i++)
{
queue[rear++] = str[i];
stack[++top] = str[i];
}
while(top !== -1 && IsHuiwen)
{
if(stack[top--] != queue[front++])
IsHuiwen = 0;
}
if(IsHuiwen) printf("yes!\n);
else printf("no!\n);
}
❷ 判断回文问题的C语言算法一些问题~~
楼主你有没有给全算法吧...看的很晕。
我的注释几乎是猜出来的,如果你也看的很晕的话不要奇怪...
主要的内容应该是将读入的字符串以某种方式放在栈中和队列中,再通过出栈和出队列进行判断。
void fit(Stack &W)/*----------------读入字符串,并将之以某种方式放入栈W中---------------*/
{
creatstack(W);
char str[200];
printf("请输入字符串:");
scanf("%s",&str);
Bracket(W,str);)/*-------------------一个分支函数Bracket。猜测将字符串放到栈中,或者该是一半的字符串?--------------------*/
}
int Palindrome_Test() /*-----------判断是否字符串是回文-----------*/
{
SqStack S;
LinkQueue Q;
InitStack (S);
InitQueue (Q);
int i; /*------------定义了却没使用...
猜测应该是在队列时使用,但程序没给出ENQUEUE和OUTQUEUE的具体内容
所以无从判断------------*/
char V;
SElemType V1,V2;
while((V=getchar())!='@')/*--------------很明显是字符串输入结束符,不过题目中以回车为结束,是否改为'\n'较好呢------------*/
{
Push(S,V);
EnQueue(Q,V);
}
while(S.top!=S.base) /*-------栈还没有空------------*/
{
Pop(S,V1);//------------出栈
DeQueue(Q,V2);//------------出队列
if(V1!=V2)
return 0;/*-----------这个代表不回文,因为出现不符合回文定义的情况----------*/
}
return 1;/*----------这个代表回文---------*/
}
❸ C语言回文算法
我前几天刚好做过类似题,这里才3位数比较简单,已经调试并运行过了,绝对准确!
main()
{
int n,i,a[5];
for(i=10;i<=200;i++)/*回文数至少为两位数,即大于9*/
{
if(i/100>=1)/*三位数得情况*/
{
a[0]=i/100;/*百位数*/
a[1]=i%100/10;
a[2]=i%10;
if(a[0]==a[2])printf("\n%d",i);
}
else /*两位数得情况*/
{
a[0]=i/10;
a[1]=i%10;
if(a[0]==a[1])printf("\n%d",i);
}
}
}
❹ C语言回文算法
我前几天刚好做过类似题,这里才3位数比较简单,已经调试并运行过了,绝对准确!
main()
{
int
n,i,a[5];
for(i=10;i<=200;i++)/*回文数至少为两位数,即大于9*/
{
if(i/100>=1)/*三位数得情况*/
{
a[0]=i/100;/*百位数*/
a[1]=i%100/10;
a[2]=i%10;
if(a[0]==a[2])printf("\n%d",i);
}
else
/*两位数得情况*/
{
a[0]=i/10;
a[1]=i%10;
if(a[0]==a[1])printf("\n%d",i);
}
}
}
❺ c语言回文数判定
除法和求余算法判断回文数:把一个数的各个位上的数字独立出来
打比方:123
个位上的数字3=123%10;
十位上的数字2=(123/10)%10···
不用数组的话,可以用链栈存储结构,首先把输入的数字通过除法和求余运算把一个数字的各个位拆分开来,再把拆开的一组数字的一半存入链栈,再出栈与剩余的一半数字作比较。
❻ c语言求回文子串的个数的高效算法
class Palindrome {
public:
int getLongestPalindrome(string A, int n) {
int max=0,count=0;
for(int i=0;i<n;i++) //i作为回文串的中心
{
for(int j=0;((i-j)>=0)&&((i+j)<n);j++)//若回文串是奇数个,i中心前面有j个,后面有j个
{
if(A[i-j]!=A[i+j])
break;
count=j*2+1;
}
if(max<count)
max=count;
for(int j=0;((i-j)>=0)&&((i+1+j)<n);j++)//若回文串是偶数个,i和i+1是中心,前面有j个,后面有j个
{
if(A[i-j]!=A[i+1+j])
break;
count=j*2+2;
}
if(max<count)
max=count;
}
return max;
}
};