1439: 可排回文
时间限制: 1 Sec 内存限制: 128 MB
提交: 218 解决: 46
[提交][状态][讨论版]
题目描述
回文数指从左向右读和从右向左读是一样大的数(如32123,173371都是回文数)。
现在我们定义只要经过排列后能形成回文的数叫做"可排回文数"(如112,可重排为回文数121,则可称112为可排回文数)。
下面请编写程序判断一个数是不是“可排回文数”。
输入
一个非负整数N,如果N是-1,结束输入。(N<10^1000000)
输出
如果满足条件输出Yes,否则输出No。
样例输入
1
112
123
-1
样例输出
Yes
Yes
No
提示
来源
Derson
来源: http://acm.hnust.edu.cn/JudgeOnline/problem.php?id=1439
#include <iostream>
#include <cstdio>
#include <map>
#include <string>
#include <algorithm>
#include <stdlib.h>
#include <cstring>
#include <set>
using namespace std;
int num[10];
int main()
{
char c;
memset(num,0,sizeof(num));
while((c=getchar())!='-')
{
if(c=='\n')
{
int opp=0,flag=1,other = 0;
for(int i=0;i<10;i++)
{
if(num[i]%2) opp? flag=0:opp=1;
if(i!=0&&num[i]) other++;
}
if(!(num[0]%2)&&num[0]&&opp&&other==1) flag=0;
printf("%s\n",flag?"Yes":"No");
memset(num,0,sizeof(num));
}
else if(c<='9'&&c>='0') num[c-'0']++;
}
return 0;
}