Python_5

Python_5

    • 7-1 部分逆置 (10 分)
    • 7-2 单链表基本操作 (5 分)
    • 7-3 删除列表中的重复值(高教社,《Python编程基础及应用》习题4-8) (5 分)
    • 7-4 逆序输出 (10 分)
    • 7-5 Python-任意多行字符串拆分数值求和 (20 分)
    • 7-6 sdut-求整数的位数及各位数字之和 (10 分)
    • 7-7 sdut-输出字母在字符串中位置索引 (10 分)
    • 7-8 不按常理出牌的列表 - 实验4 装番茄和啤酒的容器 - 《Python编程实验》 (10 分)
    • 7-9 词频统计 - 实验11 字典操作及应用 - 《Python编程实验》 (10 分)
    • 7-10 求给定范围内所有数字的平方和 (10 分)
  • 素质五连:评论、点赞、收藏、转发、打赏

7-1 部分逆置 (10 分)


输入n个整数,把第i到j之间的全部元素进行逆置(1 ≤ i < j ≤ n),输出逆置后的n个数。

输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试数据首先输入n,i,j(含义如上描述),然后再输入n个整数。

输出格式:
对于每组测试数据,输出逆置后的n个整数。每两个数据之间留1个空格。

输入样例:
2
7 2 6 11 22 33 44 55 66 77
5 1 5 11 22 33 44 55
输出样例:
11 66 55 44 33 22 77
55 44 33 22 11

仅供参考
c++编译器

#include
using namespace std;
const int N =1e5;
int num[N];
int main(void){
     
	int n;
	cin>>n;
	while(n--){
     
		int a,b,c;
		cin>>a>>b>>c;
		for(int i=1;i<=a;i++){
     
			cin>>num[i];
		}
		int t1=b,t2=c;
		while(t1<t2){
     
			int f=num[t1];
			num[t1]=num[t2];
			num[t2]=f;
			t1++;
			t2--;
		}
		for(int i=1;i<=a;i++) {
     
			cout<<num[i];
			if(i==a) cout<<endl;
			else cout<<' ';
		}
	} 
	return 0;
} 

7-2 单链表基本操作 (5 分)


请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。

输入格式:
输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行为1个正整数m,表示对该链表施加的操作数量;接下来m行,每行表示一个操作,为2个或3个整数,格式为0 k d或1 k。0 k d表示在链表第k个结点后插入一个数据域值为d的结点,若k=0则表示表头插入。1 k表示删除链表中第k个结点,此时k不能为0。注:操作序列中若含有不合法的操作(如在长度为5的链表中删除第8个结点、删除第0个结点等),则忽略该操作。n和m不超过100000。

输出格式:
输出为一行整数,表示实施上述m个操作后的链表,每个整数后一个空格。输入数据保证结果链表不空。

输入样例:
5
1 2 3 4 5
5
0 2 8
0 9 6
0 0 7
1 0 
1 6
输出样例:
7 1 2 8 3 5 

仅供参考
C语言编译器

#include
typedef struct Node
{
     
    int data;
    struct Node*next;
}node;
node* head=NULL;
node* rear;
void insertend(node* temp)
{
     
    if(head==NULL)
    {
     
        head=temp;
        rear=temp;
        rear->next=NULL;
    }
    else
    {
     
        rear->next=temp;
        rear=temp;
        rear->next=NULL;
    }
}
void insert(node*temp,int k,int d)
{
     
    if(k==0)
    {
     
        temp->data=d;
        temp->next=head;
        head=temp;
    }
    else
    {
     
        node* p0=head;
        while(k-1>0)
        {
     
            p0=p0->next;
            k--;
        }
        temp->next=p0->next;
        p0->next=temp;
        temp->data=d;
    }
}
void delete(int k)
{
     
    node* p=head;
    int nm=1;
    while(p!=NULL&&nm<k-1)
    {
     
        p=p->next;
        nm++;
    }
    node*q=p;p=p->next;
    if(p->next!=NULL)
    {
     
        q->next=p->next;
        free(p);
    }
    else
    {
     
        q->next=NULL;
        free(p);
    }
}
int main()
{
     
    int n,i;
    int num;
    node*p;
    int m;
    scanf("%d",&n);
    for(i=0;i<n;i++) 
    {
     
        node*n=(node*)malloc(sizeof(struct Node));
        insertend(n);
    }
    p=head; 
    while(p!=NULL)
    {
     
        scanf("%d",&num);
        p->data=num;
        p=p->next;
    }
    scanf("%d",&m);
    int n1,n2,n3;
    for(i=0;i<m;i++)
    {
     
    	scanf("%d",&n1);
    	if(n1==0)
		{
     
			scanf("%d",&n2);
            scanf("%d",&n3);
			if(n2>=0&&n2<=n)
            {
     
			    node*temp=(node*)malloc(sizeof(struct Node));
			    insert(temp,n2,n3);
			    n++;
            }
		}
		if(n1==1)
		{
     
			scanf("%d",&n2);
			if(n2>0&&n2<=n)
			{
     
				delete(n2);
				n--;
			}
		}
	}
	p=head;
	while(p!=NULL)
    {
     
	    printf("%d ",p->data);
	    p=p->next;
    }
    printf("\n");
    return 0;
}

7-3 删除列表中的重复值(高教社,《Python编程基础及应用》习题4-8) (5 分)


输入一个列表,删除其中的重复值,再输出。

要求
假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个。 不同元素在列表中的相对位置不应被改变。

输入格式:
[元素1, 元素2, ... , 元素n]

输出格式:
[元素1,元素2, ... , 元素k]

输入样例:
[4,3,2,3,2,4,True]
结尾无空行
输出样例:
[3, 2, 4, True]
结尾无空行

仅供参考

list1 = eval(input())
list1.reverse()                       
list2 = ['']
for i in list1:
    if i not in list2:
        list2.insert(0, i)            
list2.pop()                            
print(list2,end='')

7-4 逆序输出 (10 分)


输入n个数,然后把这n个数逆序输出。

输入格式:
测试数据有多组,处理到文件尾。每组测试数据在一行上首先输入整数n,接着输入n(n<=40)个整数。

输出格式:
对于每组测试,逆序输出n个数,每两个数据之间留一个空格。每两组测试数据之间留一个空行。

输入样例:
5 1 2 3 4 5
3 1 2 3
输出样例:
5 4 3 2 1

3 2 1

仅供参考

f=1
while True:
    try:

        lst =list(map(int,input().split()))
        del lst[0]
        lst.reverse()
        if f==0:
            print()
        for i in range(len(lst)):
            if i==len(lst)-1:
                print("%d"%lst[i],end='')
            else:
                print("%d "%lst[i],end='')
        f=0
        print()

    except:
        break

7-5 Python-任意多行字符串拆分数值求和 (20 分)


编写程序,统计每行字符串中若干整数的和。每行字符串中整数间的分隔符可能有逗号“,”、分号“ ;”和空格,有多少行就求多少行。

输入格式:
任意输入若干行由整数构成的字符串(回车换行),整数间以逗号或空格或分号分隔。测试数确保至少有一行数据,字符串中的整数数据均合法有效。最后以一个回车结束输入。

输出格式:
对应输出原输入串(一行中的字符序列),冒号后输出各个整数之和。

输入样例:
1; 2 ,3
2 3; 4
10,20 30; 40
 9
结尾无空行
输出样例:
1; 2 ,3:6
2 3; 4:9
10,20 30; 40:100
 9:9
结尾无空行

仅供参考

try:
    while True:
        sum = 0
        st = 0
        str = input()
        num = ""
        for i in str:
            if ord(i)>=48 and ord(i)<=57:
                num+=i
                st = 1
            elif st==1:
                sum+=int(num)
                num=""
                st = 0
        if st:
            sum += int(num)
            num = ""
            st = 0
        print(str,end=":")
        print(sum)
except EOFError:
    pass

7-6 sdut-求整数的位数及各位数字之和 (10 分)


对于给定的正整数N,求它的位数及其各位数字之和。

(用Python实现提示:把整数转换成字符串,列表,用sum和len函数)

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:
456
结尾无空行
输出样例:
3 15
结尾无空行

仅供参考

num=int(input())
sum=0
wei=0
while True:
    n=num%10
    sum+=n
    wei+=1
    num=num//10
    if num==0:
        break

print(wei,sum,end='')

7-7 sdut-输出字母在字符串中位置索引 (10 分)


输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。

输入格式:
第一行输入字符串;

第二行输入两个字符,用空格分开。

输出格式:
从右向左输出字符和索引(中间有一个空格)。下标最大的字符最先输出。每行一个。

输入样例:
pmispsissippi
s p
结尾无空行
输出样例:
11 p
10 p
8 s
7 s
5 s
4 p
3 s
0 p
结尾无空行

仅供参考

str=input()
s,p=input().split()
i =len(str)-1

while i>-1:
    if i==0:
        if str[i]==s:
            print(i,s,sep=' ',end='')
        if str[i]==p:
            print(i,p,sep=' ',end='')
    else:
        if str[i]==s:
            print(i,s,sep=' ')
        if str[i]==p:
            print(i,p,sep=' ')
    i-=1

7-8 不按常理出牌的列表 - 实验4 装番茄和啤酒的容器 - 《Python编程实验》 (10 分)


下述程序从键盘读入多个以逗号分隔的元素并将其组织在一个列表中,然后遍历列表删除其中重复的元素。具体地,假设列表中存在k个值为a的元素,删除前k-1个元素,保留最后一个,不同元素在列表中的相对位置不应被改变。

v = list(eval(input()))
print("before:",v)

for x in v:
    cnt = v.count(x)
    if cnt >= 2:
        for i in range(cnt-1):
            v.remove(x)

print("after:",v)
上述程序的运行结果为(第一行为测试输入):

4, 3, 2, 3, 2, 4, True
before: [4, 3, 2, 3, 2, 4, True]
after: [3, 3, 2, 4, True]
对照上述执行结果的第2行及第3行,显然程序的执行结果不符合设定目标。原列表中的3保留了两个!


【错误分析】
程序在遍历循环(第4行)的内部执行了移除列表元素的操作(第8行)。一边遍历列表一边修改列表甚至删除列表元素可能使得遍历发生混乱,产生意料之外的结果。


请修改上述程序,使其可以正常工作。

输入格式:
由逗号分隔的多个值

输出格式:
参考输出样例,注意不同元素在列表中的相对位置不应被改变

输入样例:
4, 3, 2, 3, 2, 4, True
结尾无空行
输出样例:
before: [4, 3, 2, 3, 2, 4, True]
after: [3, 2, 4, True]
结尾无空行

仅供参考

v = list(eval(input()))
print("before:",v)
v.reverse()                        
vv = ['']
for i in v:
    if i not in vv:
        vv.insert(0, i)            
vv.pop()                           

print("after:",vv,end='')

7-9 词频统计 - 实验11 字典操作及应用 - 《Python编程实验》 (10 分)


从键盘读入由仅由英文构成的多行文本,借助于字典统计其中每个单词出现的次数。然后按字典递增序按格式输出每个单次出现的次数。


要求:
1. 所有单词不区分大小写,输出时按小写格式输出;
2. 需要排除! , : ?等英文符号,即这些符号不应作为单词的构成部分;
3. 需要排除0,1,2,... 9等数字,即这些数字不应作为单词的构成部分。
输入格式:
行数n
第1行内容
第2行内容
....
第n行内容

输出格式:
单词1 单词1出现次数
单词2 单词2出现次数
...
单词k 单词k出现次数

注意: 单词1, 2,.... k 按字典递增序。

输入样例:
4
Hello! baby! Jupyter 4 class 
class ultimately.
class
jupyter
结尾无空行
输出样例:
baby 1
class 3
hello 1
jupyter 2
ultimately 1
结尾无空行

仅供参考

n = int(input())
word = ""
dict = []
dict1 = []
while n:
    n -= 1
    st = 0
    str = input()
    for i in str:
        if (ord(i)>=ord('A') and ord(i)<=ord('Z')) or (ord(i)>=ord('a') and ord(i)<=ord('z')):
            word+=i
            st = 1
        elif st==1:
            st = 0
            #if word not in dict:
            dict.append(word.lower())
            word = ""
    if st==1:
        st = 0
        word.lower()
        #if word not in dict:
        dict.append(word.lower())
        word = ""
dict.sort()
cnt = 1
for i in dict:
    if i not in dict1:
        dict1.append(i)
        print("%s %d"%(i,dict.count(i)))

7-10 求给定范围内所有数字的平方和 (10 分)


本题目要求读入2个整数A和B,然后输出[A,B]之间所有数的平方和。

输入格式:
在一行中给出2个绝对值不超过100的整数A和B。

输出格式:
输出[A,B]之间所有数的平方和。

输入样例:
在这里给出一组输入。例如:

3 5
结尾无空行
输出样例:
在这里给出相应的输出。例如:

50
结尾无空行

仅供参考

b,e=map(int,input().split())
sum=0
for x in range(b,e+1):
    sum+=x**2
print(sum,end='')

素质五连:评论、点赞、收藏、转发、打赏

评论

点赞

收藏

你可能感兴趣的:(Python,python,算法,c语言)