1. 程式人生 > >兩週學會Python 第02天(下午)

兩週學會Python 第02天(下午)

生命不息,刷題不止,我們爭取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⊙)…