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<iostream>
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<stdio.h>
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='')
素質五連:評論、點贊、收藏、轉發、打賞

🤗🤗🤗🤗🤗🤗

🥰🥰🥰🥰🥰🥰

🤩🤩🤩🤩🤩🤩
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330320.html
標籤:python
