PAT 1084 外观数列python解法

外观数列是指具有以下特点的整数序列:d, d1, d111, d113, d11231, d112213111, ...它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对应 d1)和 1 个 1(对应 11),所以第 3 项就是 d111。又比如第 4 项是 d113,其描述就是 1 个 d,2 个 1,1 个 3,所以下一项就是 d11231。当然这个定义对 d = 1 也成立。本题要求你推算任意给定数字 d 的外观数列的第 N 项。输入格式:输入第一行给出 [0,9] 范围内的一个整数 d、以及一个正整数 N(≤ 40),用空格分隔。输出格式:在一行中给出数字 d 的外观数列的第 N 项。输入样例:1 8输出样例:1123123111

我的解法主要是构造了一个字符串d=D+“.”,这样既保证在判断d[i]==d[i+1]时,下标不会溢出,又避免了“.”与数字相等的问题。再采用迭代的方法,就可以做出来了。这道题一开始想了很久,想用递归的方法求解,但是自己想的过于复杂,于是想了一会之后,从中找出一个例子,对其进行单独分析。
D,N = input().split()
def fun(D):
    d= D+"."
    s = ""
    count = 1
    for i in range(len(D)):
        if d[i]==d[i+1]:
            count+=1
        else:
            s = s+d[i]+str(count)
            count = 1
    return s
n=1
while True:
    if n==int(N):
        break
    else:
        D = fun(D)
        n+=1
print(D)

原文地址:https://www.cnblogs.com/zhouzhou96/p/9560255.html

时间: 2024-11-12 22:35:27

PAT 1084 外观数列python解法的相关文章

PAT 1084 外观数列

https://pintia.cn/problem-sets/994805260223102976/problems/994805260583813120 外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ... 它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述.比如第 2 项表示第 1 项有 1 个 d,所以就是 d1:第 2 项是 1 个 d(对应 d1)和 1 个 1(对应 11),所以第 3 项就

PAT 1084 Broken Keyboard

PAT 1084 Broken Keyboard 题目: On a broken keyboard, some of the keys are worn out. So when you type some sentences, the characters corresponding to those keys will not appear on screen. Now given a string that you are supposed to type, and the string

FizzBuzzWhizz问题python解法

FizzBuzzWhizz 你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏.此时有100名学生在上课.游戏的规则是: 1. 你首先说出三个不同的特殊数,要求必须是个位数,比方3.5.7. 2. 让全部学生拍成一队,然后按顺序报数. 3. 学生报数时,假设所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz:假设所报数字是第二个特殊数(5)的倍数,那么要说Buzz:假设所报数字是第三个特殊数(7)的倍数,那么要说Whizz. 4. 学生报数时,假设所报数字同一时候

PAT 1030. 完美数列

PAT 1030. 完美数列 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格式: 输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数.第二行给出N个正整数,每个数不超过109. 输出格式: 在一行中输出最多可以选择多少个数可以用它们组成一个完美数列. 输入样例: 10 8 2 3

外观数列

外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述.前五项如下: 1. 12. 113. 214. 12115. 1112211 被读作  "one 1"  ("一个一") , 即 11.11 被读作 "two 1s" ("两个一"), 即 21.21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一&quo

斐波那契数列python实现

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).时间限制:1秒 空间限制:32768K Python实现 class Solution: def Fibonacci(self, n): if n <= 1: return n if n >= 2: num = [] for i in range(n+1): if i <= 1: num.append(i) else: num.append(num[i-1]+ num[i-2]

PAT 乙级 1049 数列的片段和(20) C++版

1049. 数列的片段和(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4)

求斐波那契数列-python

斐波那契数列 Fibonacci sequences(fei bo na qi):0.1.1.2.3.5.8.13.21.34-- 递归算法: 1 def Fibonacci(n): 2 if n <= 1: return n 3 else: return Fibonacci(n - 1) + Fibonacci(n - 2) 迭代算法: 1 def Fibonacci(n): 2 if n <= 1: return n 3 else: 4 oneback,twoback = 1, 0 5 f

PAT 乙级 1049 数列的片段和

输入样例: 4 0.1 0.2 0.3 0.4 输出样例: 5.00 暴力解法时间复杂度Θ(n^3) 空间复杂度Θ(n) 这种复杂度肯定会超时的. 一开始我还以为是DP,优化掉了一层循环时间复杂度Θ(n^2) 空间复杂度Θ(n) 结果还是超时了. #include <iostream> #include <stdio.h> #include <string.h> #include <string> #include <map> #include