HDU 5373 The shortest problem(这题算模拟吧)

本文深入探讨了游戏开发领域的关键技术,包括游戏引擎、编程语言、硬件优化等,并重点阐述了AI音视频处理的应用场景和实现方法,如语义识别、物体检测、语音变声等。通过实例分析,揭示了技术融合带来的创新解决方案。

The shortest problem

Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 0    Accepted Submission(s): 0


Problem Description
In this problem, we should solve an interesting game. At first, we have an integer n, then we begin to make some funny change. We sum up every digit of the n, then insert it to the tail of the number n, then let the new number be the interesting number n. repeat it for t times. When n=123 and t=3 then we can get 123->1236->123612->12361215.
 

Input
Multiple input. We have two integer n (0<=n<=104 ) , t(0<=t<=105) in each row. When n==-1 and t==-1 mean the end of input.
 

Output
For each input , if the final number are divisible by 11, output “Yes”, else output ”No”. without quote.
 

Sample Input
35 2 35 1 -1 -1
 

Sample Output
Case #1: Yes Case #2: No
 
/*********************************************************************/

题意:给你一个数n和操作次数t,每次操作将n的各位数之和求出来放在n的末尾形成新的n,问t次操作后得到的n是否可以被11整除。蓝色部分如果不理解,可以举个例子,如题中提到的n=123,第一次操作求得的各位之和为1+2+3=6,放在n的末尾形成新的n=1236;第二次操作各位之和为1+2+3+6=12,形成新的n为123612;以此类推。

首先,有一点要清楚的是,怎么样的数能被11整除,原先知道也好,百度过也好,你会知道,当一个数的奇数位之和与偶数位之和的差的绝对值能被11整除,那么该数就可以被11整除。如35816,奇数位之和为17,偶数位之和是6,差的绝对值为11,所以能被11整除。

既然知道了这一点,那就可以直接做了,每次操作,只要+奇数位,-偶数位,那么最终结果求一下绝对值再看能不能被11整除就行了。

这题总体来说还是比较简单的,刚开始想到没敢写,毕竟总觉得会超时,如此暴力,结果就A了,好吧,是我想太多

上代码,有问题欢迎留下评论,我会尽快回复

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<stdlib.h>
#include<cmath>
#include<string>
#include<algorithm>
#include<iostream>
#define exp 1e-10
using namespace std;
const int N = 20;
const int inf = 1000000000;
int s[N],k;
__int64 Abs(__int64 x)
{
    return x<0?-x:x;
}
__int64 fun(__int64 x)
{
    __int64 tem=0;
    while(x)
    {
        s[k++]=x%10;
        tem+=x%10;
        x/=10;
    }
    return tem;
}
int main()
{
    __int64 n,m,ans,tem;
    int t,v,j=1;
    while(scanf("%I64d%d",&n,&t)&&(n!=-1||t!=-1))
    {
        ans=k=0;
        v=1;m=fun(n);
        while(k--)
            if(v)
                ans+=s[k],v=0;
            else
                ans-=s[k],v=1;
        while(t--)
        {
            k=0;
            m+=fun(m);
            while(k--)
                if(v)
                    ans+=s[k],v=0;
                else
                    ans-=s[k],v=1;
        }
        printf("Case #%d: ",j++);
        if(Abs(ans)%11)
            puts("No");
        else
            puts("Yes");
    }
}
菜鸟成长记


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值