HDU—— 4956 Poor Hanamichi

题意:给你一个区间[L,R],区间内的每个数x都可以用x=Anx10^n +An-1x10^n-1+......+A1x10+A0;其中偶数位之和-奇数位之和=3,Hanamichi这个人找到了规律,并且写了一个公式Answer = (R + 8) / 11 – (L – 1 + 8) / 11,现给你一个区间,证明区间内的符合条件的元素个数与用公式计算的符合条件的个数是否一样,即验证公式的正确性如果正确输出-1,如果不正确输出那个导致结果不正确的最小的元素。

解题思路:本题给的数据不大,所以可用暴力求解,即将区间内的每个元素分解判断是否符合条件,然后计数,最后得到的结果与计算公式的结果进行对比,只要出现不一致的直接跳出,详见代码。

Code:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;

int main()
{
    //freopen("input.txt","r",stdin);
    int T;
    LL L,R,num,flag;
    LL e_num,o_num,sum;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%I64d%I64d",&L,&R);
        LL i,temp,cnt = 0;
        for(i = L; i <= R; i++)
        {
           num = i; flag = 1; sum = 0;//将区间内的每一个数都赋给num
           e_num = 0; o_num = 0;
           while(num)//然后对区间内的每个数num进行分割
           {
               sum +=(num%10)*flag;//奇数位为负,偶数为正,用flag进行调整
               if(flag == 1) e_num +=num%10;//e_num表示偶数位相加之和,当flag为正时,进行偶数位相加,
               else o_num +=num%10;//o_num表示奇数位相加之和,当flag为负时,进行负数位相加
               flag *=-1;  num /=10;//对flag乘以-1来进行奇偶变换
           }
           if(e_num > o_num && sum == 3) cnt++;//统计每次的区间内符合条件的个数
           temp = (i+8)/11-(L+7)/11;//利用公式计算此时区间里符合条件的个数
           if(temp != cnt) break;//如果有一个跟计算公式的结果不同,就直接跳出
        }
        if(temp == cnt) printf("-1\n");
        else printf("%I64d\n",i);
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值