兩週學會Python 第02天(下午)
阿新 • • 發佈:2019-02-11
生命不息,刷題不止,我們爭取7天之內把所有pat的乙級題刷完,平均每天10道題吧!能夠多做,儘量多做點.
後面7天,我們以做專案為主.
1007. 素數對猜想 (20)
"""
1.求出質數表
所有的非質數(>2的正整數),都可以化作多個質數的乘積,例如4=2*2,6=2*3,8=2*2*2
因此,判斷一個數是不是質數,只需要判斷它有沒有質數因子
而判斷有沒有質數因子,最多隻需要遍歷小於該數的平方根的質數
例如num=127:
max = math.sqrt(num) = 11.27
i=2 -> num%i==1
i=3 -> num%i==1
i=5 -> num%i ==2
...
i=10 -> num%i==7
i=11 -> num%i==6
i > max 終止遍歷,結論: a為質數
2.遍歷質數表,對差為2進行統計
"""
import math
prime_number_list = []
n = int(input())
for num in range(2,n+1):
max = math.sqrt(num)
is_prime_number = True
for i in prime_number_list:
if i > max:
break
elif num%i==0:
is_prime_number = False
break
if is_prime_number:
prime_number_list.append(num)
count = 0
now = 2
for next in prime_number_list:
if next - now==2:
count +=1
now = next
print(count)
1008. 陣列元素迴圈右移問題 (20)
這道題用列表切分,簡直是無法形容的簡單
index = int(input().split(" ")[1])
list = input().split(" ")
index = index%len(list)
result = list[-index:] + list[0:-index]
print(" ".join(result))
1009. 說反話 (20)
msg = input().split(" ")
msg.reverse()
print(" ".join(msg))
1010 一元多項式求導 (25)
https://www.patest.cn/contests/pat-b-practise/1010
這道題,有點智障吧.我也不知道問題出在哪裡,我用java和Python都不能通過,最後用的是C++通過的.
奇葩的是,我照著C++的程式碼敲著翻譯成java或Python也通不過.也許pat上面的題,就是各種各樣的bug吧.
最後我整個人都崩潰了,有哪位大神,知道原因,還請賜教啊!
C++程式碼如下:
#include<stdio.h>
int main()
{
int a[100],i=0,N;
while(1)
{
scanf("%d",&a[i]);
if(a[i]==0&&i%2) break;
i++;
}
N=i+1;
if(a[1]==0)
printf("0 0");
else
{
for(i=0;i<N;i=i+2)
{
a[i]=a[i]*a[i+1];
a[i+1]--;
}
if(a[1]>=0)
printf("%d %d",a[0],a[1]);
for(i=2;i<N;i=i+2)
{
if(a[i+1]>=0)
printf(" %d %d",a[i],a[i+1]);
}
}
printf("\n");
return 0;
}
翻譯成java程式碼如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a[] = new int[100];
int i=0,N;
while(true)
{
a[i] = in.nextInt();
if(a[i]==0&&i%2==1) break;
i++;
}
N=i+1;
if(a[1]==0)
System.out.print("0 0");
else
{
for(i=0;i<N;i=i+2)
{
a[i]=a[i]*a[i+1];
a[i+1]--;
}
if(a[1]>=0)
System.out.print(a[0]+" "+a[1]);
for(i=2;i<N;i=i+2)
{
if(a[i+1]>=0)
System.out.print(" "+a[i]+" "+a[i+1]);
}
}
System.out.println();
}
}
java程式碼如下
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<Integer> list = new ArrayList<Integer>();
int n;
do{
int k = in.nextInt();
n = in.nextInt();
list.add(k * n);
list.add(n-1);
}while(n!=0);
if(list.get(1)<0){
System.out.println("0 0");
}else{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i =i + 2) {
if(list.get(i+1)>=0){
sb.append(list.get(i)).append(" ").append(list.get(i+1)).append(" ");
}
}
System.out.println(sb.toString().trim());
}
}
}
Python程式碼如下:
li = input().split(" ")
result = []
if li[1] == "0":
print("0 0")
else:
pre = 0
cal = False
for i in li:
i = int(i)
if cal:
k = i * pre
v = i -1
if v >= 0:
result.append(str(k))
result.append(str(v))
else:
pre = i
cal = not cal
print(" ".join(result))
悲哀的結局,額(⊙o⊙)…