[多校] The shortest problem

大数取余优化技巧
本文介绍了一种解决特定数学游戏问题的高效算法。通过优化大数取余过程,避免了传统方法中的高时间复杂度问题。文章提供了一个C++实现示例,详细解释了如何在每次迭代中即时计算对11的余数,从而判断最终结果是否能被11整除。
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
 

    题意:将一个数的每一位相加,得到的和放到该数的后面,经过t次后。以最后数对11进行整除,若可以整除输出Yes否则No

    该题首先思路是用数组将将运算得的数存起来,最后将该数进行大数取余。这是最直观的想法,但是这种方法必定会超时,因为首先需要经过t次每位的相加,然后存到数组里,而该数又与平常的大数加法不同,得到的数放在最后的。所以以直观方法去写复杂度会很高。

    优化方法:其实没必要将得到的数字存起来,由大数取余运算可知,需要从数字的最大位开始取余,由于该题对11取余,所以需要对最大两位进行取余然后将余数放回数组中,再对最大的两位取余,一直到数组最后,若最后的值为0则可以整除。而这种方法由于该题目关系,每进行一次各位求和(sum)就可以对sum进行取余,然后求得的和放到数组最后便成为了下次取余的目标。以此类推,完成大数取余的过程并不需要储存到数组中。一边累加一边完成。由于累加得到的值会有多位,所以需要计算sum的位数。不懂就直接看代码吧

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>

using namespace std;

int mul,top,sum;
int main()
{
    int n,t,m;
    int i,j=0,k;
    while (scanf("%d%d",&n,&t),n!=-1||t!=-1)
    {
        j++;
        top=0;sum=0;
        k=n%11;
        while (t--)
        {
            mul=1;
            while (n)
            {
                sum += n%10;
                n /= 10;
            }
            n=m=sum;
            while(m)
            {
                m /= 10;
                mul *= 10;
            }
            k= (k*mul+sum)%11;
        }
        if(k==0)
            printf("Case #%d: Yes\n",j);
        else
            printf("Case #%d: No\n",j);
    }
    return 0;
}


在充满仪式感的生活里,一款能传递心意的小工具总能带来意外惊喜。这款基于Java开发的满屏飘字弹幕工具,正是为热爱生活、乐于分享的你而来——它以简洁优雅的视觉效果,将治愈系文字化作灵动弹幕,在屏幕上缓缓流淌,既可以作为送给心仪之人的浪漫彩蛋,也能成为日常自娱自乐、舒缓心情的小确幸。 作为程序员献给crush的心意之作,工具的设计藏满了细节巧思。开发者基于Swing框架构建图形界面,实现了无边框全屏显示效果,搭配毛玻璃质感的弹幕窗口与圆润边角设计,让文字呈现既柔和又不突兀。弹幕内容精选了30条治愈系文案,从“秋天的风很温柔”到“你值得所有温柔”,涵盖生活感悟、自我关怀、浪漫告白等个维度,每一条都能传递温暖力量;同时支持自定义修改文案库,你可以替换成专属情话、纪念文字或趣味梗,让弹幕更具个性化。 在视觉体验上,工具采用柔和色调生成算法,每一条弹幕都拥有独特的清新配色,搭配半透明渐变效果与平滑的移动动画,既不会遮挡屏幕内容,又能营造出灵动治愈的氛围。开发者还优化了弹幕的生成逻辑,支持自定义窗口大小、移动速度、生成间隔等参数,最可同时显示60条弹幕,且不会造成电脑卡顿;按下任意按键即可快速关闭程序,操作便捷无负担。 对于Java学习者而言,这款工具更是一份优质的实战参考。源码完整展示了Swing图形界面开发、定时器调度、动画绘制、颜色算法等核心技术,注释清晰、结构简洁,哪怕是初学者也能轻松理解。开发者在AI辅助的基础上,反复调试优化细节,解决了透明度控制、弹幕碰撞、资源占用等个问题,这份“踩坑实录”也为同类项目开发提供了宝贵经验。 无论是想给喜欢的人制造浪漫惊喜,用满屏文字传递心意;还是想在工作间隙用治愈文案舒缓压力,或是作为Java学习的实战案例参考,这款满屏飘字弹幕工具都能满足你的需求。它没有复杂的操作流程,无需额外配置环境,下载即可运行,用最纯粹的设计传递最真挚的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值