鱼C论坛

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

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

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

  2. def f(m,n):
  3.     if m == 0:
  4.         list1=[]
  5.         string = 'b'*n
  6.         list1.append(string)
  7.         return list1
  8.     else:      
  9.         list3 = []
  10.         for each in f(m-1,n):
  11.             for number in range(len(each)+1):
  12.                 list3.append(each[:number]+'a'+each[number:])
  13.         return list3

  14. list1 = list({}.fromkeys(f(m,n)).keys())
  15.    
  16. for each in list1:
  17.     if (each.find('aaa') == -1) and (each.find('bbb') == -1):
  18.         print(each)
  19.         break
  20. else:
  21.     print('不存在')
复制代码

终于把能组成的所有可能汇成一个列表了

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-6 17:52:30 | 显示全部楼层
  1. def fun344(A,B):
  2.     h=0
  3.    
  4.     if A < B:
  5.         A,B = B,A
  6.         h = 1
  7.     if A <= 2:
  8.         if h ==1:
  9.             string = 'b'*B+'a'*A
  10.         else:
  11.             string = 'a'*B+'b'*A
  12.     else:
  13.         d = (A-2)/B
  14.    
  15.         if d > 2:
  16.             string = '无法拼成'
  17.         else:
  18.             if d >= 1:
  19.         
  20.                 t = A-2*B
  21.                
  22.                 if h ==1:
  23.                     string = 'bba'*B+'b'*t
  24.                 else:
  25.                     string = 'aab'*B+'a'*t  
  26.                      
  27.             else:
  28.                 n = B//2
  29.                 x = A-2*n
  30.                 y = B%2
  31.                 if h==1:
  32.                     string = 'bbaa'*n + 'b'*x + 'a'*y
  33.                 else:
  34.                     string = 'aabb'*n + 'a'*x + 'b'*y
  35.     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 | 显示全部楼层
  1. def fun344(A,B):
  2.     h=0
  3.    
  4.     if A < B:
  5.         A,B = B,A
  6.         h = 1
  7.     if A <= 2:
  8.         if h ==1:
  9.             string = 'b'*B+'a'*A
  10.         else:
  11.             string = 'a'*B+'b'*A
  12.     else:
  13.         d = (A-2)/B
  14.    
  15.         if d > 2:
  16.             string = '无法拼成'
  17.         else:
  18.             if d >= 1:
  19.         
  20.                 L = A/2
  21.                 if L < B:
  22.                     n = A//2
  23.                     x=A-2*n
  24.                     y=B-n
  25.                     if h ==1:
  26.                         string = 'bba'*n+'b'*t+'a'*y
  27.                     else:
  28.                         string = 'aab'*n+'a'*x+'b'*y
  29.                 else:
  30.                     t = A-2*B
  31.                     if h ==1:
  32.                         string = 'bba'*B+'b'*t
  33.                     else:
  34.                         string = 'aab'*B+'a'*t   
  35.                      
  36.             else:
  37.                 n = B//2
  38.                 x = A-2*n
  39.                 y = B%2
  40.                 if h==1:
  41.                     string = 'bbaa'*n + 'b'*x + 'a'*y
  42.                 else:
  43.                     string = 'aabb'*n + 'a'*x + 'b'*y
  44.     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 时打印的是 “此数据无法拼接”,是有解的

好嘞
  1. a = input('a = ')
  2. b = input('b = ')
  3. s = ''
  4. num1 = int(a)
  5. num2 = int(b)
  6. counta = 0
  7. countb = 0
  8. for i in range(num1 + num2):
  9.     if num1 != 0:
  10.         s += 'a'
  11.         counta += 1
  12.         num1 -= 1
  13.     if num1 == 0 and num2 != 0:
  14.         s += 'b'
  15.         countb += 1
  16.         num2 -= 1
  17.     if num1 != 0 and num2 != 0:
  18.         if counta == 2:
  19.             s += 'b'
  20.             counta = 0
  21.             num2 -= 1
  22.         elif countb == 2:
  23.             s += 'a'
  24.             num1 -= 1
  25.             countb = 0
  26.     if counta > 2 or countb > 2:
  27.         s = '此数据无法拼接!'
  28. if s == '此数据无法拼接!':
  29.     s = ''
  30.     num1 = int(a)
  31.     num2 = int(b)
  32.     counta = 0
  33.     countb = 0
  34.     for i in range(num1 + num2):
  35.         if num2 != 0:
  36.             s += 'b'
  37.             countb += 1
  38.             num2 -= 1
  39.         if num2 == 0 and num1 != 0:
  40.             s += 'a'
  41.             counta += 1
  42.             num1 -= 1
  43.         if num1 != 0 and num2 != 0:
  44.             if counta == 2:
  45.                 s += 'b'
  46.                 counta = 0
  47.                 num2 -= 1
  48.             elif countb == 2:
  49.                 s += 'a'
  50.                 num1 -= 1
  51.                 countb = 0
  52.         if counta > 2 or countb > 2:
  53.             s = '此数据无法拼接!'
  54. 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,返回值为输出的值,不然我不方便测



  1. def day344(a,b):
  2.     s = ''
  3.     num1 = int(a)
  4.     num2 = int(b)
  5.     counta = 0
  6.     countb = 0
  7.     for i in range(num1 + num2):
  8.         if num1 != 0:
  9.             s += 'a'
  10.             counta += 1
  11.             num1 -= 1
  12.         if num1 == 0 and num2 != 0:
  13.             s += 'b'
  14.             countb += 1
  15.             num2 -= 1
  16.         if num1 != 0 and num2 != 0:
  17.             if counta == 2:
  18.                 s += 'b'
  19.                 counta = 0
  20.                 num2 -= 1
  21.             elif countb == 2:
  22.                 s += 'a'
  23.                 num1 -= 1
  24.                 countb = 0
  25.         if counta > 2 or countb > 2:
  26.             s = '此数据无法拼接!'
  27.     if s == '此数据无法拼接!':
  28.         s = ''
  29.         num1 = int(a)
  30.         num2 = int(b)
  31.         counta = 0
  32.         countb = 0
  33.         for i in range(num1 + num2):
  34.             if num2 != 0:
  35.                 s += 'b'
  36.                 countb += 1
  37.                 num2 -= 1
  38.             if num2 == 0 and num1 != 0:
  39.                 s += 'a'
  40.                 counta += 1
  41.                 num1 -= 1
  42.             if num1 != 0 and num2 != 0:
  43.                 if counta == 2:
  44.                     s += 'b'
  45.                     counta = 0
  46.                     num2 -= 1
  47.                 elif countb == 2:
  48.                     s += 'a'
  49.                     num1 -= 1
  50.                     countb = 0
  51.             if counta > 2 or countb > 2:
  52.                 s = '此数据无法拼接!'
  53.     return s
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 09:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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