XDOJ1180 - 对称数

Description

最近LL大神开始看具体数学了,他发现一种奇妙的数字,这种数字是对称的,比如125521,21212这些,他还发现,有些对称的数字还具有一开始递增,后来递减,且只相差1的特点,比如12321,123454321,34543。我们的LL大神现在想知道,如果各个位上的和知道了,那么有多少个这样的数字呢?

比如N=9,有12321和9两个,答案是2

Input

第一行一个数字T,表示测试数据组数。
之后T行,每行一个数字N,表示要求的N。
数据范围N<=81

Output

每行一个数字,表示答案数。

Sample Input

1
9

Sample Output

2

解题思路:

由于测试数据比较小,可以用最朴素的方法做.

题目要求满足的数其各个位相加要等于N,

(1)如果N是奇数,那么中间的数必为奇数

(2)如果N是偶数,那么中间的数必为偶数

#include<iostream>

using namespace std;


int main()
{
    int caseN;
    while(cin>>caseN){
        for(int i=0;i<caseN;++i)
        {int N;
        while(cin>>N)
        {
                int result = 0;
                int i = 0;
                if(N%2==1)
                    i = 1;
                else
                    i = 2;
                int t = 0;
                for(;i<10;i=i+2)
                {
                    int j=i-1;
                    t = i;
                    if(t==N)
                        ++result;
                    while(j>=1&&t<N)
                    {
                        t = t+2*j;
                        if(t==N)
                        {
                            ++result;
                            break;
                        }
                        --j;
                    }
                }
                cout<<result<<endl;
            }
        }
    }
    return 0;
}

 

最后欢迎大家访问我的个人网站: 1024s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值