#include <stdio.h>
#include <string.h>
int main()
{
int m,num=0,geshu,j;
char ch[51],min;
while (scanf("%s", ch) == 1)
{
num = 0;
geshu = 1;
m = strlen(ch);
for (int i = 0;i<(m/2);i++)
{
if (ch[i] == ch[m - 1 - i])
num=num+1;
}
if (num == (m / 2))
{
printf("YES ");
for (int i = 0; i <= num; i++)
{
for(j=i;j<=num;j++)
{ if(ch[j]>ch[j+1])
{min=ch[j+1];
ch[j+1]=ch[j];
ch[j]=min;}}
}
for(int i=0;i<num;i++)
{
if (ch[i] != ch[i+1])
geshu++;
}
//if((m%2)==0)
printf("%d\n",geshu-1);
//else
//printf("%d\n",geshu);
}
else
printf("NO\n");
}
return 0;
}
样例输出是这样的
求是否是回文串,且不同字母个数?哪里出问题了?为什么输出结果全是no?
修改如下,供参考:
#include <stdio.h>
#include <string.h> //修改
int main()
{
int m,num=0,geshu;// ,ch[51] 修改
char ch[51]; // 修改
while (scanf("%s", ch) == 1)
{
num = 0; //修改
geshu = 1;
m = strlen(ch);//m = strlen(ch)-1;修改
for (int i = 0;i<(m/2);i++)
{
if (ch[i] == ch[m - 1 - i])
num=num+1;
}
if (num == (m / 2)) //if ((num-1) == (m / 2))修改
{
printf("YES ");
//这里开始统计字母个数
for (int i = 1; i <= num; i++)
//for (int i = 1; i < num; i++)修改
{
if (ch[i] != ch[i - 1])
geshu++;
}
//if(m%2==0) 修改
printf("%d\n",geshu);
//else 修改
// printf("%d\n",geshu+1);修改
}
else
printf("NO\n");
}
return 0;
}