Python作业4

本文探讨了四种编程挑战:圈内报数留人问题的两种实现策略、计算100以内奇数和的算法、生成1,2,3,4组成素数及求解最大值和总和的函数,以及模拟sorted()函数。通过对比和分析,展示了不同方法的优缺点。
摘要由CSDN通过智能技术生成

作业四、选择结构、循环结构、函数定义与使用
作业内容:
1、有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k(假设k = 3)报数,报到k的人退出圈子;然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。
要求:编写程序,模拟上面的游戏,要求初始人数n和报数临界值k可以自由指定。运行程序并观察游戏进行的过程。使用两种方法实现,并简单分析其优劣。
2、编写程序,至少使用两种不同的方法计算100以内所有奇数的和。
3、编写程序,输出所有由1、2、3、4这4个数字组成的素数,并且在每个素数中每个数字只使用一次。
4、编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。
5、编写函数,模拟内置函数sorted()。

#4.1
#solution 1
n = input();
k = input();
arr = {};
for i in range(int(n)):
    arr[int(i)] = 1;
ans = int(n)-1;
pos = 0;
while ans!=0:    
    tmp = k;
    while tmp!=0:
        if(arr[pos]==1):
            tmp=int(tmp)-1;
            if(tmp==0):
                arr[pos] = 0;
        pos+=1;
        pos = int(pos)%int(n);
    ans-=1;
for i in range(int(n)):
    if(arr[int(i)]==1):
        print(i);  
#solution 2
n = int(input());
k = int(input());
ans = int(0);
for i in range(n):
    ans = (ans+m)%i
print(ans);
#第一种模拟实际情况,过程直观但效率低,第二种使用数学推导式,代码简洁效率高。

#4.2
#solution 1
ans = int(0);
for i in range(1,101,2):
    ans+=i;
print(ans);
#solution 2
ans = int(50+50*49*2/2);
print(ans);

#4.3
import math
def isprime(x):
    if(x==1):
        return False;
    for i in range(2,int(math.sqrt(x))+1):
        if(x%i==0):
            return False;
    return True;
def isok(x):
    x = int(x);
    arr = [0,0,0,0];
    while int(x)!=0:
        tmp = int(x%10);
        x/=10;
        if(tmp==0):
            return False;        
        if(tmp<=4):
            arr[tmp-1]+=1;
            if(arr[tmp-1]>1):
                return False;
        else:
            return False;
    return True;
for i in range(1,4322):
    if(isok(i)):
        if(isprime(i)):
            print(i);

#4.4
arr = list(map(int,input().split())); 
ans = int(0);
mx = int(0);
minn = 1e18;
for i in range(len(arr)):
    mx = max(mx,arr[i]);
    minn = min(minn,arr[i]);
    ans+=arr[i];
print('最大值为',mx);
print('最小值为',minn);
print('和为',ans);

#4.5
n = int(input());
arr = list(map(int,input().split()));
for i in range(n):
    for j in range(0,n-i-1):
        if(arr[j]>arr[j+1]):
            tmp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = tmp;
for i in range(n):
    print(arr[i]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈希表扁豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值