为荣誉而拼搏少年 2024-06-23 16:01 采纳率: 36.8%
浏览 130

# [洛谷 202406GESP 模拟 三级] 小洛的数字游戏

[洛谷 202406GESP 模拟 三级] 小洛的数字游戏

题目描述

小洛有一个正整数 $n$,他会进行若干次下列操作:

  • 取出正整数 $n$ 的末位,记作 $x$;
  • 将 $x$ 平方之后,保留个位,放于 $n$ 的首位之前(特别地,如果 $x$ 为 $0$,则不进行该步);

上述两步合计为一次操作。例如有一个正整数 $142$,它可以进行如下操作:

  • 取出末尾的 $2$,原正整数变为 $14$;
  • $2^2=4$,放于 $14$ 首位之前成为 $414$,第一次操作完成;
  • 取出末尾的 $4$,原正整数变为 $41$;
  • $4^2=16$,保留个位的 $6$,放于 $41$ 的首位成为 $641$,第二次操作完成;
  • 以此类推……

现在小洛想知道,对于一个正整数 $n$,能否进行不超过 $q$ 次操作让其变为正整数 $m$。请你帮他。

输入格式

输入三个正整数 $n,m,q$。

输出格式

如果能进行不超过 $q$ 次操作让正整数 $n$ 变为正整数 $m$,则输出若干行,第 $i$ 行输出一个正整数表示进行第 $i$ 次操作后的正整数 $n$ 的值。否则输出一行一个整数 $-1$。

样例 #1

样例输入 #1

123 611 10

样例输出 #1

912
491
149
114
611

样例 #2

样例输入 #2

123 231 12345

样例输出 #2

-1

提示

对于 $30%$ 的数据,保证小洛实际只需要不超过 $5$ 次操作即可得到 $m$;

对于所有数据,数据保证 $1\leq n,m\leq 10^9$,$1 \leq q \leq 10^6$。

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-23 16:01
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    这个问题是一个编程挑战,涉及到模拟和条件判断。以下是解决这个问题的算法思路:

    1. 理解问题:首先,我们需要理解题目描述的操作过程,以及如何判断一个数是否可以通过若干次操作变为另一个数。

    2. 模拟操作:编写一个函数来模拟一次操作,即取出一个数的末位数字,计算其平方后保留个位,然后将其放在原数的前面。

    3. 条件判断:在模拟操作的过程中,我们需要检查当前操作后的数是否与目标数相等,或者操作次数是否超出了限定的 ( q ) 次。

    4. 输出结果:如果操作成功,即在不超过 ( q ) 次操作内达到了目标数,我们需要输出每一步操作后的数。如果操作失败,则输出 (-1)。

    5. 优化:考虑到数据范围,可能需要一些优化措施来避免不必要的操作,比如一旦发现操作后的数不可能变为目标数,就可以提前终止操作。

    6. 编程实现:使用你选择的编程语言(题目标签提示使用 C++),根据上述思路编写代码。

    以下是解决这个问题的伪代码示例:

    function simulateOperation(n):
        lastDigit = n % 10
        newDigit = (lastDigit * lastDigit) % 10
        return newDigit * 10 + n // 将新数字放在前面
    
    function canTransform(n, m, q):
        operations = 0
        while operations < q:
            if n == m:
                return True
            newN = simulateOperation(n)
            if newN == n: // 如果操作后没有变化,说明无法继续操作
                return False
            n = newN
            operations += 1
        return False
    
    function main():
        read n, m, q from input
        if canTransform(n, m, q):
            for i from 0 to q:
                print(n)
                n = simulateOperation(n)
        else:
            print(-1)
    

    请注意,这只是一个示例,实际的编程实现可能需要考虑更多的边界情况和优化措施。如果你需要具体的编程语言实现或者有其他问题,随时可以问我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月23日