Demo31 - Demo60

Demo31 打印菱形 II

题目描述

如下所示,是一个高度为 9 的菱形

用户输入菱形高度 n ,并打印出该高度下的菱形

输入输出描述

输入高度 n , n 为奇数

输出该高度的菱形

示例

输入:

5

输出:

   *

  * *

*     *

  * *

   *

实例代码

"""

              i       j       k

    *         1       1       4

   * *        2      1 2      3

  * * *       3     1 2 3     2

 * * * *      4    1 2 3 4    1

* * * * *     5   1 2 3 4 5   0

 * * * *      6    1 2 3 4    1

  * * *       7     1 2 3     2

   * *        8      1 2      3

    *         9       1       4

j <= i and i + j <= 10

j == 1 or j == i or i + j == 10

"""

n = eval(input())

for i in range(1, n + 1):

    for k in range(abs(n // 2 + 1 - i )):

        print(" ", end = "")

    for j in range(1, i + 1):

        if j <= i and i + j <= n + 1:

            if j == 1 or j == i or j + i == n + 1:

                print("*", end = " ")

            else:

                print(" ", end = " ")

    print()

Demo32 打印菱形 III

题目描述

如下所示,是一个高度为 9 的菱形

用户输入菱形高度 n ,并打印出该高度下的菱形

输入输出描述

输入高度 n , n 为奇数

输出该高度的菱形

示例

输入:

5

输出:

   *

  ***

 *****

  ***

    *

Demo33 猜数字

题目描述

计算机随机生成一个 [0,100] 之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同

对于用户输入的数字,程序会提示它是过高还是过低

输入输出描述

每次输入一个整数

每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束

示例

输入: 50

输出:高了

输入: 25

输出:低了

输入: 42

输出:高了

输入: 39

输出:猜中了!答案就是 39

Demo34 最大公约数 I

题目描述

输入两个正整数,计算其最大公约数,例如 4 和 2 的最大公约数是 2 , 16 和 24 的最大公约数是 8

输入输出描述

输入两个数字

输出最大公约数

示例1

输入:

16 24

输出:

8

示例2

输入:

7 3

输出:

1

实例代码

num1, num2 = eval(input())

min_num = min(num1, num2)

for num in range(min_num, 0, -1):

    if num1 % num == 0 and num2 % num == 0:

        print(num)

        break

Demo35 判断素数

题目描述

一个大于 1 的整数如果只能被正整数 1 和它本身整除,则它就是素数,例如 2 、 3 、 5 和 7 都是素数,而 4 、6、 8 、 9 则不是

输入输出描述

输入一个大于 1 的正整数

输出 Yes 表示该数字是素数,否则输出 No

示例1

输入:

9

输出:

No

示例2

输入:

11

输出:

Yes

实例代码

num = eval(input())

# 哨兵:监控状态变化

flag = True # 默认是素数

for n in range(2, num // 2 + 1):

    if num % n == 0:

        flag = False

        break

if flag:

    print("YES")

else:

    print("No")

Demo36 最小公倍数

题目描述

输入两个正整数,计算其最小公倍数,例如 4 和 2 的最小公倍数是 4 , 3 和 5 的最小公倍数是 15

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

Demo37 整数的素因子

题目描述

输入一个正整数,然后找出它所有的最小因子,也称之为素因子

输入输出描述

输入一个正整数

输出多行,每行输出一个素因子

示例 1

输入:

120

输出:

2 2 2 3 5

解释:

2 * 2 * 2 *3 * 5 = 120

示例 2

输入:

100

输出:

2 2 5 5

实例代码

num = eval(input())

while num != 1: # 120 60 30 15 5

    for n in range(2, num + 1):

        if num % n == 0:

            print(n, end = " ")

            num = num // n

            break

# 2 2 2 3

# O(N * logN)

Demo38 完全数

题目描述

如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数

例如 6 = 3 + 2 + 1 , 28 = 14 + 7 + 4 + 2 + 1

输入输出描述

输入一个正整数

输出该数是否为完全数

示例1

输入:

6

输出:

Yes

示例2

输入:

9

输出:

No

Demo39 前50个素数

题目描述

打印前 50 个素数,每打印 10 个素数换行

m = 0

n=0

for x in range(2,100000):

    for i in range(1, x + 1):

        if x % i == 0:

            m += 1

    if m == 2:

        print(x, end="\t")

        n+=1

        if n % 6 == 0:

            print(end='\n')

        if n>=50:

            break

m=0

Demo40 计算π

题目描述

你可以使用下面的数列近似计算 π

当 i 越大时,计算结果越近似于 π

#计算PI

import math

# 获取用户输入的迭代次数

iterations = int(eval(input("请输入迭代次数:")))

result = 0

for i in range(1,iterations + 1):

    result += (-1) ** (i + 1) * (1 / (2 * i - 1))

approx_pi = 4 * result

print(f"通过{iterations}次迭代,π的近似值为:{approx_pi}")

print(f"π的真实值为:{math.pi}")

Demo41 计算e

题目描述

你可以使用下面的数列近似计算 e

当 i 越大时,计算结果越近似于 e

import math

iterations = eval(input("请输入迭代次数:"))

e = 1

for i in range(1,iterations+1):

        result = math.factorial(i)

        e += 1 / result

print(e)

Demo42 剪刀石头布 II

题目描述

延伸【 Demo21 剪刀石头布 I 】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜利者

#剪刀石头布

import random

computer_score = 0

user_score = 0

while computer_score < 3 or user_score < 3:

    # 计算机随机选择剪刀、石头或布

    computer_choice = random.randint(0, 2)

    # 将数字对应到剪刀、石头或布

    choices = ['剪刀', '石头', '布']

    # 获取用户输入

    user_input = int(input("请输入数字 0、1 或 2,分别代表剪刀、石头或布:"))

    user_choice = choices[user_input]

    # 输出计算机和用户的选择

    computer_choice_str = choices[computer_choice]

    print("计算机出的", computer_choice_str)

    print("用户出的", user_choice)

    # 判断胜负

    if user_input == computer_choice:

        print("平局")

    elif (user_input - computer_choice) == 1 or (user_input == 0 and computer_choice == 2):

        print("用户赢")

        user_score += 1

    else:

        print("计算机赢")

        computer_score += 1

    if user_score == 3:

        print("用户是终极胜利者")

        break

    if computer_score == 3:

        print("计算机是终极胜利者")

        break

Demo43 组合问题 I

题目描述

在数字范围 [1,7] 之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数

注:组合( a , b )与组合( b , a )算同一种组合,只记录一次

#组合问题1

count = 0

for i in range(1,8):

    for j in range(i+1,8):

        print("组合 ({}, {})".format(i, j))

        count += 1

print("共有{}种组合".format(count))

Demo44 组合问题 II

题目描述

有 1 、 2 、 3 、 4 这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?

#组合问题2

count = 0

for i in range(1, 5):

    bai = i

    for j in range(1, 5):

        if i != j:

            shi = j

            for k in range(1, 5):

                if k != i and k != j: 

                    ge = k

                    print(bai * 100 + shi * 10 + ge)

                    count += 1

print("组合个数为", count)

Demo45 水仙花数

题目描述

水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如

编写程序,输出所有的水仙花数

for num in range(100,1000):

    ge = num % 10

    shi = num // 10 % 10

    bai = num // 100

    if ge ** 3 + shi ** 3 + bai ** 3 == num:

        print(num)

Demo46 青蛙跳台阶

题目描述

一只青蛙,一次可以跳一个台阶或者两个台阶,现有 n 个台阶,问该青蛙有多少种不同的跳法?

例如:两个台阶,有两种跳法( 1+1 , 2 );四个台阶,有五种跳法( 1+1+1+1 , 2+1+1 , 1+2+1 ,

1+1+2 , 2+2 )

Demo47 堆叠相加

题目描述

输入输出描述

输入两个数据分别为数字 a 和组数 n

输出按照堆叠相加模式算出的和

示例

输入:

3 4

输出:

3702

解释:

3 + 33 + 333 + 3333 = 3702

a = 1

b = 2

n = eval(input("请输入阶数:"))

if n == 1 or n == 2:

    print(n)

for n in range(3,n+1):

    c = a + b

    a = b

    b = c

print(c)

Demo48 十进制转二进制

题目描述

输入一个十进制正整数,输出其二进制形式

输入输出描述

输入一个十进制正整数

输出二进制字符串

示例

输入:

9

输出:

1001

#十进制转二进制

dec_num = int(input("输入一个十进制正整数: "))  # 接受用户输入的十进制正整数

if dec_num == 0:

    bin_str = "0"

else:

    bin_str = ""

    while dec_num > 0:

        remainder = dec_num % 2

        bin_str = str(remainder) + bin_str

        dec_num = dec_num // 2

print("输出二进制字符串:", bin_str)

Demo49 二进制转十进制

题目描述

输入一个二进制字符串,输出其对应的十进制数字

输入输出描述

输入一个二进制字符串

输出十进制数字

示例

输入:

1001

输出:

9

#二进制转十进制

num = input("输入二进制字符串:")

numList = list(map(int,num))

numList.reverse()

decNum = 0

for i in range(len(num)):

    decNum +=  numList[i] * (2 ** i)

print(decNum)

Demo50 十进制转十六进制

题目描述

输入一个十进制正整数,输出其十六进制形式

输入输出描述

输入一个十进制正整数

输出十六进制字符串

示例

输入:

1233321

输出:

1e1b9

#十转十六进制

s=""

num = eval(input("请输入一个十进制数:"))

while num != 0:

    y = num % 16

    if y >= 10:

       y = chr(ord("a") + y - 10)

    s=str(y)+ s

    num = num //16

print(s)

Demo51 十六进制转十进制

题目描述

输入一个十六进制字符串,输出其对应的十进制数字

输入输出描述

输入一个十六进制字符串

输出十进制数字

示例

输入:

1e1b9

输出:

123321

num = input()

size = len(num) - 1

c = d = i = 0

while size >= 0:

    if num[size] >='0' and num[size] <= '9':

        y = int (num[size])

    elif num[size] >= 'A' and   num[size] <='F':

        y = ord(num[size]) -55

    elif num[size] >= 'a' and   num[size] <='a':

        y = ord(num[size]) -87

    else:

        c = 1

        break

    d = d +(y*(16**i))

    size = size - 1

    i = i + 1

print(f"十进制:{d}")

   

num = input()

size = len(num) - 1

c = d = i = 0

while size >= 0:

    if num[size] >='0' and num[size] <= '9':

        y = int (num[size])

    elif num[size] >= 'A' and   num[size] <='F':

        y = ord(num[size]) -55

    elif num[size] >= 'a' and   num[size] <='a':

        y = ord(num[size]) -87

    else:

        c = 1

        break

    d = d +(y*(16**i))

    size = size - 1

    i = i + 1

print(f"十进制:{d}")

   

Demo52 最长公共前缀

题目描述

给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写

输入输出描述

输入两行,分别表示 s1 和 s2

输出前缀串

示例

输入:

abcdefg

abcdhko

输出:

Abcd

s1 = (input("请输入第一个字符串:"))

s2 = (input("请输入第二个字符串:"))

strSame = ""

minLen = min((len(s1), len(s2)))

for i in range(minLen):

    if s1[i] == s2[i]:

        strSame += s1[i]

print(strSame)

Demo53 子串出现的次数

题目描述

给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配

输入输出描述

输入两行字符串,分别为 s1 和 s2 , s2 的长度小于等于 s1

输出 s2 在 s1 中出现的次数

示例1

输入:

ABCsdABsadABCasdhjabcsaABCasd

ABC

输出:

3

示例2

输入:

AAAAAAAA

AAA

输出:

2

s1 = (input("请输入父字符串:"))

s2 = (input("请输入子字符串:"))

count = 0

for i in range(0, len(s1),len(s2)):

    if s1[i : i + len(s2)] == s2:

        count += 1

print(count)

Demo54 最长公共子串

题目描述

给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写

输入输出描述

输入两行字符串,分别为 s1 和 s2

输出最长公共子串

示例

输入:

123ABCDEFG83hsad

iughABCDEFG23uy

输出:

ABCDEFG

def longest_common_substring(s1, s2):

    len1, len2 = len(s1), len(s2)

    max_len = 0

    end_index = 0

    for i in range(len1):

        for j in range(len2):

            k = 0

            while i+k < len1 and j+k < len2 and s1[i+k] == s2[j+k]:

                k += 1

            if k > max_len:

                max_len = k

                end_index = i + k

    return s1[end_index - max_len: end_index]

s1 = input()

s2 = input()

result = longest_common_substring(s1, s2)

print(result)

Demo55 检测密码

题目描述

一些网站会给密码强加一些规则:

密码必须至少有8个字符

密码只能包含英文字母和数字

密码应该至少包含两个数字

密码应该至少包含两个大写字母

如果密码符合规则,输出Yes;否则输出No

输入输出描述

输入一串密码

输出该密码是否符合规则

示例1

输入:

123456ab

输出:

No

示例2

输入:

123abcABC

输出:

Yes

#检测密码

passwd = input("请输入你的密码:")

num = 0

capital = 0

flag = True

if len(passwd) >= 8:

    for p in passwd:

        char_code = ord(p)

        if not (48 <= char_code <= 57 or 65 <= char_code <= 90 or 97 <= char_code <= 122):

            flag = False

        if 48 <= char_code <= 57:

            num += 1

        if 65 <= char_code <= 90:

            capital += 1

if  not (num >= 2 and capital >= 2):

    flag = False

if flag:

    print("Yes")

else:

print("No") 

Demo56 回文素数

题目描述

回文素数是指一个数既是素数又是回文数,例如 131 既是素数也是回文数

输出显示前 100 个回文素数,每行显示 10 个

passwd = input("请输入你的密码:")

num = 0

capital = 0

flag = True

if len(passwd) >= 8:

    for p in passwd:

        char_code = ord(p)

        if not (48 <= char_code <= 57 or 65 <= char_code <= 90 or 97 <= char_code <= 122):

            flag = False

        if 48 <= char_code <= 57:

            num += 1

        if 65 <= char_code <= 90:

            capital += 1

if  not (num >= 2 and capital >= 2):

    flag = False

if flag:

    print("Yes")

else:

print("No") 

Demo57 反素数

题目描述

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如 17 和 71 都是素数但不是回文数,且反转后依旧是素数

输出显示前 100 个反素数,每行显示 10 个

from math import*

def prime(100):

    for j in range(2,int(sqrt(n))+1):

        if n%j==0:

            return 0

    return 1

   

def reverse(m):

    m1= int(m[::-1])

    if str(m1)!=m and prime(m1):

        return 1

    return 0

x = int(input())

i, a = 0, 2

while i<x:

    if prime(a) and reverse(str(a)):

        print(a, end=' ')

        i+=1

a+=1

Demo58 双素数

题目描述

双素数是指一对差值为 2 的素数,例如 3 和 5 就是一对双素数, 5 和 7 也是一对双素数

输出显示小于 1000 的双素数

#双素数

def is_prime(n):

    if n < 2:

        return False

    for i in range(2, n // 2 + 1):

        if n % i == 0:

            return False

    return True

def find_twin_primes():

    twin_primes = []

    for num in range(2, 1000):

        if is_prime(num) and is_prime(num + 2):

            twin_primes.append((num, num + 2))

    return twin_primes

twin_primes = find_twin_primes()

for twin_prime in twin_primes:

print(f"{twin_prime[0]}和{twin_prime[1]}是一对双素数")

Demo59 梅森素数

如果一个素数可以写成的形式,其中p 是某个正整数,那么这个素数就称作梅森素数

输出 p ≤ 31 的所有梅森素数

#梅森素数

def is_prime(n):

    if n < 2:

        return False

    for i in range(2, int(n ** 0.5) + 1):

        if n % i == 0:

            return False

    return True

def find_mersenne_primes():

    mersenne_primes = []

    for p in range(1, 32):

        exponent = 2 ** p - 1

        if is_prime(exponent):

            mersenne_primes.append(exponent)

    return mersenne_primes

mersenne_primes = find_mersenne_primes()

for i in mersenne_primes:

print(i,"是梅森素数")

Demo60 平方根的近似求法

当 nextGuess 和 lastGuess 几乎相同时, nextGuess 就是平方根的近似值

lastGuess 初始值为 1 ,如果 nextGuess 和 lastGuess 的差值小于一个很小的数,比如 0.0001 ,就可以认为nextGuess是 n 的平方根的近似值;否则, nextGuess 成为下一次计算的 lastGuess ,近似过程继续执行

编写代码,求解 n 的平方根的近似值

def sqrt_approximation(n):

    last_guess = 1

    next_guess = (last_guess + n / last_guess) / 2

   

    while abs(next_guess - last_guess) > 0.0001:

        last_guess = next_guess

        next_guess = (last_guess + n / last_guess) / 2

   

    return next_guess

n = float(input("请输入一个数: "))

result = sqrt_approximation(n)

print("平方根的近似值为:", result)

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值