题目描述
所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,比如12321。
现在给出n个一位整数数字,请问:从这n个数字中任选一些数字,能拼成的最长回文数 是多少位?
输入
输入一个整数n(1<=n<=100,表示随后将输入的数字个数)。
然后输入n个一位非负整数数字,即其取值范围为[0, 9]。
输出
输出能拼成的最长回文数的位数。
样例输入 Copy
15 1 2 2 3 5 7 0 1 2 3 4 5 2 2 3
样例输出 Copy
11
代码如下:
#include<stdio.h>
int main()
{
int n,count=0;//count记位数
scanf("%d",&n);
int a[n+1];
int b[]={0,0,0,0,0,0,0,0,0,0};//b[]数组用来计数,从0到9都为0 例:b[7]={0}
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
if(b[a[i]]%2==0)//当 b[]累积到2时,计数再清零
{
count+=2;
}
}
for(int i=0;i<10;i++)
{
if(b[i]%2!=0)
{
count++;//如果还有奇数个的话,count+1,放在回文数的中间
break;// 记得写break;
}
}
printf("%d\n",count);
return 0;
}
算法:用a[i]储存输入的数,b[a[i]]用来记a[i](输入的数)的次数,每输入一次就累积一次,当累积到2时,count+2然后b[a[i]]清零。
循环完之后,所有偶数个的数字都没了,若此时还有奇数个的数,(写循环判断),取一个数放再回文数的最中间,count+1。(记得写break退出循环,不然就加了所有奇数个的数字,最后所得结果为n)
新手,如有错误请指正,谢谢!