鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

[已解决]Python:每日一题 344

[复制链接]
发表于 2020-3-6 16:19:04 | 显示全部楼层
m, n = map(int, input().split())

def f(m,n):
    if m == 0:
        list1=[]
        string = 'b'*n
        list1.append(string) 
        return list1
    else:       
        list3 = []
        for each in f(m-1,n):
            for number in range(len(each)+1):
                list3.append(each[:number]+'a'+each[number:])
        return list3

list1 = list({}.fromkeys(f(m,n)).keys())
    
for each in list1:
    if (each.find('aaa') == -1) and (each.find('bbb') == -1):
        print(each)
        break
else:
    print('不存在')
终于把能组成的所有可能汇成一个列表了

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 17:52:30 | 显示全部楼层
def fun344(A,B):
    h=0
    
    if A < B:
        A,B = B,A
        h = 1
    if A <= 2:
        if h ==1:
            string = 'b'*B+'a'*A
        else:
            string = 'a'*B+'b'*A
    else:
        d = (A-2)/B
    
        if d > 2:
            string = '无法拼成'
        else:
            if d >= 1:
        
                t = A-2*B
                
                if h ==1:
                    string = 'bba'*B+'b'*t
                else:
                    string = 'aab'*B+'a'*t  
                      
            else:
                n = B//2
                x = A-2*n
                y = B%2
                if h==1:
                    string = 'bbaa'*n + 'b'*x + 'a'*y
                else:
                    string = 'aabb'*n + 'a'*x + 'b'*y
    return string

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:15:50 | 显示全部楼层
fan1993423 发表于 2020-3-5 20:25
因为是只用列出一种解,就简单许多了,楼主可以增加难度,问有几种可能性。

36 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:16:53 | 显示全部楼层
l0stparadise 发表于 2020-3-5 20:34
绝对超时。。。。

超时……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:17:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:17:31 | 显示全部楼层
TJBEST 发表于 2020-3-5 20:48
不知道符不符合题主的意思

44 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:19:32 | 显示全部楼层

改进一下

当输入 A = 1, B = 3 时打印的是 “此数据无法拼接”,是有解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:19:59 | 显示全部楼层
蒋博文 发表于 2020-3-5 21:12
我觉得会超时。。。。
但是人还是要尝试对吧

24 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:21:14 | 显示全部楼层

输入 a = 4, b = 1 不符合条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:21:19 | 显示全部楼层
本帖最后由 jiong_jiong 于 2020-3-6 18:23 编辑
fan1993423 发表于 2020-3-5 19:49
题目有问题,有可能无解,比如A=15,B=2.


好像确实是。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:22:24 | 显示全部楼层

输入 a = 1, b = 1 不符合要求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:26:17 | 显示全部楼层
def fun344(A,B):
    h=0
    
    if A < B:
        A,B = B,A
        h = 1
    if A <= 2:
        if h ==1:
            string = 'b'*B+'a'*A
        else:
            string = 'a'*B+'b'*A
    else:
        d = (A-2)/B
    
        if d > 2:
            string = '无法拼成'
        else:
            if d >= 1:
        
                L = A/2
                if L < B:
                    n = A//2
                    x=A-2*n
                    y=B-n
                    if h ==1:
                        string = 'bba'*n+'b'*t+'a'*y
                    else:
                        string = 'aab'*n+'a'*x+'b'*y
                else:
                    t = A-2*B
                    if h ==1:
                        string = 'bba'*B+'b'*t
                    else:
                        string = 'aab'*B+'a'*t    
                      
            else:
                n = B//2
                x = A-2*n
                y = B%2
                if h==1:
                    string = 'bbaa'*n + 'b'*x + 'a'*y
                else:
                    string = 'aabb'*n + 'a'*x + 'b'*y
    return string
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:33:56 | 显示全部楼层
zltzlt 发表于 2020-3-6 18:19
改进一下

当输入 A = 1, B = 3 时打印的是 “此数据无法拼接”,是有解的


好,你等等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:44:39 | 显示全部楼层
zltzlt 发表于 2020-3-6 18:19
改进一下

当输入 A = 1, B = 3 时打印的是 “此数据无法拼接”,是有解的

好嘞
a = input('a = ')
b = input('b = ')
s = ''
num1 = int(a)
num2 = int(b)
counta = 0
countb = 0
for i in range(num1 + num2):
    if num1 != 0:
        s += 'a'
        counta += 1
        num1 -= 1
    if num1 == 0 and num2 != 0:
        s += 'b'
        countb += 1
        num2 -= 1
    if num1 != 0 and num2 != 0:
        if counta == 2:
            s += 'b'
            counta = 0
            num2 -= 1
        elif countb == 2:
            s += 'a'
            num1 -= 1
            countb = 0
    if counta > 2 or countb > 2:
        s = '此数据无法拼接!'
if s == '此数据无法拼接!':
    s = ''
    num1 = int(a)
    num2 = int(b)
    counta = 0
    countb = 0
    for i in range(num1 + num2):
        if num2 != 0:
            s += 'b'
            countb += 1
            num2 -= 1
        if num2 == 0 and num1 != 0:
            s += 'a'
            counta += 1
            num1 -= 1
        if num1 != 0 and num2 != 0:
            if counta == 2:
                s += 'b'
                counta = 0
                num2 -= 1
            elif countb == 2:
                s += 'a'
                num1 -= 1
                countb = 0
        if counta > 2 or countb > 2:
            s = '此数据无法拼接!'
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:52:07 | 显示全部楼层

竟然没超时。。。。
我好惊讶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 18:55:48 | 显示全部楼层

以后的每日一题请写成一个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:59:01 | 显示全部楼层
zltzlt 发表于 2020-3-6 18:55
以后的每日一题请写成一个函数

请先测速
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 19:00:00 | 显示全部楼层


麻烦你先写成一个函数,参数为 a 和 b,返回值为输出的值,不然我不方便测
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 19:10:37 | 显示全部楼层
本帖最后由 wuqramy 于 2020-3-6 19:33 编辑
zltzlt 发表于 2020-3-6 19:00
麻烦你先写成一个函数,参数为 a 和 b,返回值为输出的值,不然我不方便测


def day344(a,b):
    s = ''
    num1 = int(a)
    num2 = int(b)
    counta = 0
    countb = 0
    for i in range(num1 + num2):
        if num1 != 0:
            s += 'a'
            counta += 1
            num1 -= 1
        if num1 == 0 and num2 != 0:
            s += 'b'
            countb += 1
            num2 -= 1
        if num1 != 0 and num2 != 0:
            if counta == 2:
                s += 'b'
                counta = 0
                num2 -= 1
            elif countb == 2:
                s += 'a'
                num1 -= 1
                countb = 0
        if counta > 2 or countb > 2:
            s = '此数据无法拼接!'
    if s == '此数据无法拼接!':
        s = ''
        num1 = int(a)
        num2 = int(b)
        counta = 0
        countb = 0
        for i in range(num1 + num2):
            if num2 != 0:
                s += 'b'
                countb += 1
                num2 -= 1
            if num2 == 0 and num1 != 0:
                s += 'a'
                counta += 1
                num1 -= 1
            if num1 != 0 and num2 != 0:
                if counta == 2:
                    s += 'b'
                    counta = 0
                    num2 -= 1
                elif countb == 2:
                    s += 'a'
                    num1 -= 1
                    countb = 0
            if counta > 2 or countb > 2:
                s = '此数据无法拼接!'
    return s 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 19:11:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-17 09:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表