最长回文数

题目描述

所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,比如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)

新手,如有错误请指正,谢谢!

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值