鱼C论坛

 找回密码
 立即注册
查看: 3081|回复: 78

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

[复制链接]
发表于 2020-3-5 19:41:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


给定两个整数 A 和 B,返回任意字符串 S,要求满足:

  • S 的长度为 A + B,且正好包含 A 个 'a' 字母与 B 个 'b' 字母;
  • 子串 'aaa' 没有出现在 S 中;
  • 子串 'bbb' 没有出现在 S 中。


示例 1:

输入:A = 1, B = 2
输出:"abb"
解释:"abb", "bab" 和 "bba" 都是正确答案。
示例 2:

输入:A = 4, B = 1
输出:"aabaa"


欢迎大家一起答题!
最佳答案
2020-3-5 21:12:27
我觉得会超时。。。。
但是人还是要尝试对吧
  1. def fun344(x,y):
  2.     a = 'a'
  3.     b = 'b'
  4.     if x < y:
  5.         x,y = y,x
  6.         a,b = b,a
  7.     z = min(x - y, y)
  8.     if z == 0:
  9.         return (a + b) * y
  10.     result = (2 * a + b) * z
  11.     if z == y:
  12.         n = x - 2 * y
  13.         result += n * a
  14.         return result
  15.     else:
  16.         result += (a + b) * (2 * y - x)
  17.         return result
复制代码



本帖被以下淘专辑推荐:

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

使用道具 举报

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

使用道具 举报

发表于 2020-3-5 19:48:23 | 显示全部楼层
子串 'aaa' 没有出现在 S 中;
子串 'bbb' 没有出现在 S 中。

意思是不允许连续三个一样的字母出现,对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 19:49:25 | 显示全部楼层
题目有问题,有可能无解,比如A=15,B=2.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 19:56:01 From FishC Mobile | 显示全部楼层
fan1993423 发表于 2020-3-5 19:49
题目有问题,有可能无解,比如A=15,B=2.

保证不存在无解的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-5 19:56:40 From FishC Mobile | 显示全部楼层
SHRS23 发表于 2020-3-5 19:48
子串 'aaa' 没有出现在 S 中;
子串 'bbb' 没有出现在 S 中。


是的,而且字符串中仅包含 a 和 b 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 20:01:55 | 显示全部楼层
fan1993423 发表于 2020-3-5 19:49
题目有问题,有可能无解,比如A=15,B=2.

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

使用道具 举报

发表于 2020-3-5 20:04:32 | 显示全部楼层

请看清楚题意再来回答,ok?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 20:09:23 | 显示全部楼层
这道题还可以在难点,比如问有几种可能性。就更难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 20:14:00 | 显示全部楼层
本帖最后由 SHRS23 于 2020-3-6 09:46 编辑
  1. """
  2. 给定两个整数 A 和 B,返回任意字符串 S,要求满足:
  3. S 的长度为 A + B,且正好包含 A 个 'a' 字母与 B 个 'b' 字母;
  4. 子串 'aaa' 没有出现在 S 中;
  5. 子串 'bbb' 没有出现在 S 中。
  6. """
  7. def generate_str(a, b):
  8.     s = ''
  9.     if a>b:
  10.         devide_a_by_b = True
  11.     else:
  12.         a, b = b, a
  13.         devide_a_by_b = False
  14.     while b > 0 or a > 0:
  15.             if a >= 2:
  16.                 if devide_a_by_b:
  17.                     s += 'aa'
  18.                 else:
  19.                     s += 'bb'
  20.                 a -= 2
  21.             elif a == 1:
  22.                 if devide_a_by_b:
  23.                     s += 'a'
  24.                 else:
  25.                     s += 'b'
  26.                 a -= 1
  27.             if b:
  28.                 if devide_a_by_b:
  29.                     s += 'b'
  30.                 else:
  31.                     s += 'a'
  32.             b -= 1
  33.     print(s)

  34. def day344():
  35.     a, b = map(int, input('Input A B: ').split())
  36.     generate_str(a, b)

  37. day344()
复制代码


麻烦版主帮忙测试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 20:20:35 | 显示全部楼层
fan1993423 发表于 2020-3-5 20:04
请看清楚题意再来回答,ok?

刚才敲的代码全废了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 20:21:28 | 显示全部楼层
很久没答啦哈哈哈,准备高考了
版主都换头像啦
考虑无解(害怕)
  1. def solve(a, b):
  2.     if a == 0:
  3.         return b*'b'
  4.     if b == 0:
  5.         return a*'a'
  6.     if a > 2*b + 2 or b > 2*a + 2:
  7.         return None
  8.     else:
  9.         if a > b:
  10.             return 'aab'*(a-b)+'ab'*(2*b-a) if a <= 2*b else 'aab'*b+'a'*(a-2*b)
  11.         else:
  12.             return 'bba'*(b-a)+'ba'*(2*a-b) if b <= 2*a else 'bba'*a+'b'*(b-2*a)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-5 20:23:34 | 显示全部楼层
一个答案就算对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-5 20:25:16 | 显示全部楼层
因为是只用列出一种解,就简单许多了,楼主可以增加难度,问有几种可能性。
  1. def fun344(A,B):
  2.     difference=abs(A-B)
  3.     if not difference:return 'ab'*A
  4.     elif difference<=2:
  5.         if A>B:return 'ab'*B+'a'*difference
  6.         else:return 'ba'*A+'b'*difference
  7.     else:
  8.         new_diff=difference-2
  9.         if A>B:return 'aab'*new_diff+'ab'*(B-new_diff)+'aa'
  10.         else:return 'bba'*new_diff+'ba'*(A-new_diff)+'bb'
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-5 20:34:41 | 显示全部楼层
绝对超时。。。。
  1. import random

  2. def f344(A,B):
  3.     list1=[]
  4.     for i in range(A):
  5.         list1.append("a")
  6.     for i in range(B):
  7.         list1.append("b")
  8.     random.shuffle(list1)
  9.     str1=creat_str(list1)

  10.     while True:
  11.         if "aaa" not in str1 and "bbb" not in str1:
  12.             return str1
  13.         else:
  14.             random.shuffle(list1)
  15.             str1 = creat_str(list1)

  16. def creat_str(list1):
  17.     str1=""
  18.     for i in list1:
  19.         str1+=i
  20.     return str1
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-5 20:46:58 | 显示全部楼层
本帖最后由 塔利班 于 2020-3-5 21:21 编辑
  1. def f344(A,B):
  2.     a,b='a','b'
  3.     if A>B:
  4.         A,B=B,A
  5.         a,b=b,a
  6.     t=(B-1)//2
  7.     if A>=t:
  8.         if 2*t>=A:
  9.             return (b+a+b+a)*(A-t)+(b+b+a)*(2*t-A)+b*(B-2*t)
  10.         else:
  11.             return (b+a)*A+b*(B-A)
  12.     else:
  13.         return '拼个锤子'
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-5 20:48:21 | 显示全部楼层
不知道符不符合题主的意思
  1. def fun344(A,B):
  2.     if A < B:
  3.         big = 'b'
  4.         small = 'a'
  5.         num = A
  6.     else:
  7.         big = 'a'
  8.         small = 'b'
  9.         num = B
  10.     List = [big for i in range(0,A+B)]
  11.     L = (A+B)//3
  12.     P = num - L
  13.     for index in range(1,L+1):
  14.         List[3*index-1] = small
  15.     for index in range(1,P+1):
  16.         List[3*index-2] = small
  17.     result = ''
  18.     for each in List:
  19.         result += each
  20.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2020-3-5 21:10:05 | 显示全部楼层
本帖最后由 wuqramy 于 2020-3-5 21:28 编辑


  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. print(s)
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

使用道具 举报

发表于 2020-3-5 21:12:27 | 显示全部楼层    本楼为最佳答案   
我觉得会超时。。。。
但是人还是要尝试对吧
  1. def fun344(x,y):
  2.     a = 'a'
  3.     b = 'b'
  4.     if x < y:
  5.         x,y = y,x
  6.         a,b = b,a
  7.     z = min(x - y, y)
  8.     if z == 0:
  9.         return (a + b) * y
  10.     result = (2 * a + b) * z
  11.     if z == y:
  12.         n = x - 2 * y
  13.         result += n * a
  14.         return result
  15.     else:
  16.         result += (a + b) * (2 * y - x)
  17.         return result
复制代码



评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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