栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

工作室课题研究宣传稿_工作室课题级别划分规定?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

工作室课题研究宣传稿_工作室课题级别划分规定?

工作室课题2 练习 幸运数

问题描述:
幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成。
首先从1开始写出自然数1,2,3,4,5,6,…
1 就是第一个幸运数。
我们从2这个数开始。把所有序号能被2整除的项删除,变为:
1 _ 3 _ 5 _ 7 _ 9 …
把它们缩紧,重新记序,为:
1 3 5 7 9 … 。这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去。注意,是序号位置,不是那个数本身能否被3整除!! 删除的应该是5,11, 17, …
此时7为第3个幸运数,然后再删去序号位置能被7整除的(19,39,…)
最后剩下的序列类似:
1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, …
输入要求:
输入两个正整数m n, 用空格分开 (m < n < 1000*1000)
输出要求:
程序输出 位于m和n之间的幸运数的个数(不包含m和n)。
Sample Input 1
1 20
Sample Output 1
5
HINT:时间限制:1.0s 内存限制:256.0M

#解题思路:既然是求在一个区间的幸运数,那我们可以先求出大的数到1的幸运数,在求出小的数的,然后相减即可
python代码为:


def f(x):  # f返回1-x中有多少个幸运数字
    if x == 1:
        return 1
    s = [i for i in range(1,x + 1)]
    temp = 2
    cnt = 1
    #print("0",s)
    #flag = 1
    while len(s) >= temp:
        s1 = [s[i] for i in range(len(s)) if (i + 1) % temp != 0]#用来存储幸运数字的
     #   print(flag,s1)
        temp = s1[cnt]
        cnt += 1
        s = s1
      #  flag += 1
    if m in s1 or n in s1:
        return len(s1)
    else:
        return len(s1)
m, n = map(int, input().split())  # 完成输入
print(f(n) - f(m))
子集选取

问题描述:
一个有N个元素的集合有2N个不同子集(包含空集),现在要在这2N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007。
输入要求:
输入一行两个整数N,K
输出要求:
输出一个整数表示答案。
Sample Input 1
3 2
Sample Output 1
6
HINT:时间限制:1.0s 内存限制:256.0MB
1 <= K <= N <= 10 ^ 6。
解题思路:先定义3个数组,和4个标志数组,然后进行提取求和操作。
c++代码为:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include  
#include 
#include 
#include  
#include 
#define x first
#define y second
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair PII;
typedef pair PDD;
typedef unsigned long long ULL;
const int N = 1e6 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {
    e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
int a[N];
int f[N], fact[N], infact[N];
int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    cin >> n >> k;
    fact[0] = 1, infact[0] = infact[1] = 1;
    for (int i = 1; i <= n; i ++ )  fact[i] = fact[i - 1] * (LL) i % mod;
    for (int i = 2; i <= n; i ++ )  infact[i] = (LL)(mod - mod / i) * infact[mod % i] % mod;
    for (int i = 2; i <= n; i ++ )  infact[i] = infact[i] * (LL) infact[i - 1] % mod;
    int sum = 0, res = 0, t = 2;
    for (int i = n; i >= k; i -- ) {
        sum = (LL) fact[n] * infact[k] % mod * infact[n - i] % mod * infact[i - k] % mod * (t - 1) % mod;
        t = (LL) t * t % mod;
        if (i - k & 1) res -= sum;
        else res += sum;
        if (res >= mod) res -= mod;
        if (res <= -mod) res += mod;
    }
    cout << (res + mod) % mod << endl;
return 0;
}
P1003

问题描述:
作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)
输入要求:
第一行是关键词列表,第二行是待检查的句子。
出去要求:
经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)
Sample Input 1
guns mines missiles
aameric ssell snug dan iimsssle ot sit neeemis
Sample Output 1
guns missiles
HINT:时间限制:1.0s 内存限制:256.0MB

#解题思路:先将关键词排序,然后将排序之后的关键词和原关键词组成一个字典,然后将输出的句子也是如此,然后进行键值对比较进行输出。
python代码为:


key = input().split()
sentence = input().split()
KEY = {}
SENT = {}
P = []
for i in key:
    k = list(i)
    k.sort()
    KEY["".join(k)] = i
#print(KEY)
for i in sentence:
    sen = list(i)
    sen.sort()
    SENT["".join(sen)] = i
#print(SENT)
for i in KEY.keys():
    for j in SENT.keys():
        if j == i:
            P.append(KEY[i])
print(" ".join(P))
找素数

问题描述:
给定区间[L, R] , 请计算区间中素数的个数。
输入要求:
两个数L和R。
输出要求:
一行,区间中素数的个数。
Sample Input 1
2 11
Sample Output 1
5
HINT:时间限制:1.0s 内存限制:256.0MB
2 <= L <= R <= 2147483647 R-L <= 1000000

解题思路:用个for循环一个限制区间,一个在区间里判断。利用for else语句可以计算2
python代码为:


n, m = map(int, input().split())
count = []
if n == 2:
    count.append(1)
    n +=1
for i in range(n, m + 1):
    for j in range(2, i):
        if i % j == 0:
            break
    else:
        count.append(1)
print(len(count))

L,R = map(int,input().split())
count = []
for i in range(L,R+1):
    for j in range(2,i):
        if i % j == 0:
            break
    else:
            count.append(i)
print(len(count))
但是不知道为啥都不能ac
//可以ac的代码
#include
#define ll long long
int f[1000001];
int t[1000001];
int s=0;
void init(ll l,ll r)
{
    for(ll i=2;i*i(l+1)/i?2:(l+1)/i)*i;j 
凶手 

问题描述:
巴斯维克命案抓住了六个嫌疑犯,他们的口供如下:
A:我不是罪犯
B:A、C中有一个是罪犯
C:A和B说了假话
D:C和F说了假话
E:其他五个人中,只有A和D说了真话
F:我是罪犯
他们中只有一半说了真话,凶手只有一个。
本题可能有多种可能性,即正确答案(找到唯一的凶手)可能有多个,但每一个可能的答案(某一个是凶手)都满足上述口供。
请编程找出可能的凶手输出。
样例:(假设唯一的凶手是A或者D或者E,则输出结果为三行,按字母顺序依次输出)
A
D
E
输入输出要求上所示
HINT:时间限制:1.0s 内存限制:256.0MB

解题思路:首先可以判断出c一定说了假话,所以对于d我们直接写出!=6即可,然后依次cout+=1,最后判断cout,和i输出结果
python代码为:

#首先可以判断出c一定说了假话,所以对于d我们直接写出!=6即可,然后依次cout+=1,最后判断cout,和i输出结果

for i in range(6):
    cout = 0
    if i != 1:
        cout += 1
    if i == 1 or i == 3:
        cout += 1
    if i != 6:
        cout += 1
    if i != 1 and i != 3 and i != 6:
        cout += 1
    if i == 6:
        cout += 1
    if cout == 3:
        if i == 1:
            print("A")
        if i == 2:
            print("B")
        if i == 3:
            print("C")
        if i == 4:
            print("D")
        if i == 5:
            print("E")
        if i ==6:
            print("F")
测试 质因数

问题描述:
将一个正整数N(1 输入要求:
一行,一个正整数
输出要求:
两行,第一行为用空格分开的质因数
第二行为质因数的个数
Sample Input 1
66
Sample Output 1
2 3 11
3
HINT:时间限制:1.0s 内存限制:256.0MB

解题思路;本题主要逻辑,从i=2开始,依次取模,找到则存进flag中,然后输出
python代码为:

#本体主要逻辑,从i=2开始,依次取模,找到则存进flag中,然后输出

n = int(input())
i = 2
flag = []
while i <= n:
    if i == n:
        flag.append(i)
        break
    elif n % i == 0:
        flag.append(i)
        n = n / i
    else:
        i += 1
for i in flag:
    print(i,end=" ")
print("")
print(len(flag))
淘淘的名单

问题描述:
by ZBY…  淘淘拿到了一份名单,他想对上面的名字进行处理,挑出一些特殊的名字,他请你来帮忙。
淘淘关注以下名字:
如果这个名字是“WYS”,他希望你的程序输出“KXZSMR”。
如果这个名字是“CQ”,他希望你的程序输出“CHAIQIANG”。
如果这个名字是“LC“,他希望你的程序输出“DRAGONNET”。
如果这个名字是“SYT”或“SSD”或“LSS”或“LYF”,他希望你的程序输出“STUDYFATHER”。
如果这个名字与上述任意名字都不相同,他希望你的程序输出“DENOMINATOR”。
输入要求:
第一行有一个整数N,表示淘淘手中名单里的人数。
接下来N行,每行有一个字符串,即名单里的人名。
输出要求:
输出N行,每行输出每个人名的判断结果。
Sample Input 1
9
WYS
CQ
WYS
LC
SYT
SSD
LSS
LYF
ZBY
Sample Output 1
KXZSMR
CHAIQIANG
KXZSMR
DRAGONNET
STUDYFATHER
STUDYFATHER
STUDYFATHER
STUDYFATHER
DENOMINATOR
HINT:时间限制:100ms 内存限制:8.0MB
对于 50% 数据,N <= 1000,且名单中的名字仅可能为“WYS”,“CQ”,“LC”三者之一,没有其他的名字。
对于 100% 数据,N <= 10000,人名仅由大写字母组成,长度不超过5。

解题思路:先将目标存成一个字典,然后我们可以将输入的字符串与字典的键相比较,相等则输出值,不相等则输出DENOMINATOR。
python代码为:

#

Name = {'WYS':'KXZSMR', 'CQ':'CHAIQIANG', 'LC':'DRAGONNET', 'SYT':'STUDYFATHER', 'SSD':'STUDYFATHER', 'LSS':'STUDYFATHER', 'LYF':'STUDYFATHER'}
Num = int(input())
IN = []
for i in range(Num):
    a = input()
    IN.append(a)
for i in range(Num):
    for k in Name.keys():
        if IN[i] == k:
            print(Name[k])
            break
    else:
        print("DENOMINATOR")
现代诗如蚯蚓

问题描述:
现代诗如蚯蚓
断成好几截都不会死
字符串断成好几截
有可能完全一样
请编写程序
输入字符串
输出该字符串最多能断成多少截完全一样的子串
输入要求:
一行,一个字符串
输出要求:
一行,一个正整数表示该字符串最多能断成的截数
Sample Input 1
abcabcabcabc
Sample Output 1
4
HINT:时间限制:1.0s 内存限制:256.0MB
最多能断成四个”abc”,也就是abc重复四遍便是原串
同时也能断成两个”abcabc”
最坏情况是断成一个原串”abcabcabcabc”

解题思路:首先设置一个v作为计数器,然后进行循环地板除,然后判断循环字符串的长度能否为i,不能则继续执行,取出字符串的前i个字符,进行重复,如果相等则结束
python代码为:

#

a = input()
n = len(a)
v = 1
for i in range(1, n // 2):  # 地板除
    if n % i != 0:  # 判断循环子字符串的长度能否为i
        continue  # 跳出本次循环

    temp = a[:i] * (n // i)  # 将字符串的前i个字符取出,重复(n//i)次
    if temp == a:  # 判断temp和s是否相等
        v = n // i
        break
print(v)
质数的后代

问题描述:
在上一季里,曾提到过质数的孤独,其实从另一个角度看,无情隔膜它们的合数全是质数的后代,因为合数可以由质数相乘结合而得。
如果一个合数由两个质数相乘而得,那么我们就叫它是质数们的直接后代。现在,给你一系列自然数,判断它们是否是质数的直接后代。
输入要求:
第一行一个正整数T,表示需要判断的自然数数量
接下来T行,每行一个要判断的自然数
输出要求:
共T行,依次对于输入中给出的自然数,判断是否为质数的直接后代,是则输出Yes,否则输出No
Sample Input 1
4
3
4
6
12
Sample Output 1
No
Yes
Yes
No
HINT:时间限制:1.0s 内存限制:256.0MB
1<=T<=20
2<=要判断的自然数<=105

解题思路:定义一个flag用来存储目标,然后在循环中进行取模和标志v的运算。然后输出
python代码为:

#

Num = int(input())
flag = []
for i in range(Num):
    a = int(input())
    num = 1
    v = 0
    while v <= 2:
        num += 1
        if a % num == 0:
            a /= num
            if a == 1:
                v += 1
                break
            else:
                num = 1
                v += 1
    if v == 2:
        flag.append("Yes")
    else:
        flag.append("No")
for j in flag:
    print(j)
彩票

问题描述:
为丰富男生节活动,贵系女生设置彩票抽奖环节,规则如下:
1、每张彩票上印有7个各不相同的号码,且这些号码的取值范围为[1, 33];
2、每次在兑奖前都会公布一个由七个互不相同的号码构成的中奖号码;
3、共设置7个奖项,特等奖和一等奖至六等奖。兑奖规则如下:
特等奖:要求彩票上的7个号码都出现在中奖号码中;
一等奖:要求彩票上的6个号码出现在中奖号码中;
二等奖:要求彩票上的5个号码出现在中奖号码中;
。。。。
六等奖:要求彩票上的1个号码出现在中奖号码中;
注:不考虑号码出现的顺序,例如若中奖号码为23 31 1 14 19 17 18,则彩票12 8 9 23 1 16 7由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。
现已知中奖号码和李华买的若干彩票的号码,请你写一个程序判断他的彩票中奖情况。
输出要求:
第一行一个正整数n,表示彩票数量,第二行7个整数,表示中奖号码,下面n行每行7个整数,描述n张彩票。
输出要求:
7个空格隔开的数字,第1个数字表示特等奖的中奖张数,第2个数字表示一等奖的中奖张数,第3个数字表示二等奖的中奖张数……第7个数字表示六等奖的中奖张数。
Sample Input 1
3
1 2 3 4 5 6 7
11 12 13 14 15 16 17
12 13 14 15 16 17 18
8 7 10 9 31 30 29
Sample Output 1
0 0 0 0 0 0 1
HINT:时间限制:1.0s 内存限制:256.0MB
30%的数据n<=100;
70%的数据n<=1000;
100%的数据n<=100000。
提示:数组定义为全局变量,可以分配更多内存。

解题思路:先将中奖号码保存为flag,然后在依次比较,如果在flag中,则+=1。
python代码为:

#

def F():
    for i in range(n):
        temp = list(map(int, input().split()))
        num = 0
        for j in range(7):
            if temp[j] in flag:
               num += 1
        if num != 0:
            Y[-num] += 1

n = int(input())
flag = list(map(int, input().split()))
Y = [0] * 7 #直接重复7此,【0,0,0,0,0,0,0】
#print(Y)
F()
for i in range(7):
    print(Y[i],end=" ")

相关连接:
/和%和//(地板除)
位运算符
for / else语句

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783081.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号