2022年8月29日 星期一

Python a414: 位元運算之進位篇

 a414: 位元運算之進位篇

#a414: 位元運算之進位篇

'''

輸入說明

輸入的每一行有一個十進制正整數 N (1<=N<=2147483647)。

輸入的最後一行有一個 0,代表輸入的結束,這個數字請勿做任何處理。


輸出說明

對於每個正整數 N ,請輸出以二進制計算 N+1 時所需的進位次數。



範例輸入 #1

1

4

7

17

0

範例輸出 #1

1     1==> 1+1 = 10           ,1次

0     4==> 100 + 1 =101     ,0次

3     7==> 111  +1 =1000   , 3次

1    17=10001 +1 = 10010  , 1次


二進位中最靠右的1進為了幾次


e.g.10100(20)只要看100部分即可


     11001(25)最右的一無進位 


所以只要將一直判段輸入能否為2所整除,


若無,即將輸入除二且輸出++


while(a%2==0)


{


i++;


a/=2;


}


a是輸入i是輸出


'''

def cnt_bin(n):

    a=n

    i=0

    while(a%2!=0) :

        i=i+1

        a=int(a/2)

    

    return i


print ('a414: 位元運算之進位篇')

while True:

    try:

        N=  int(input('請輸入一個十進制正整數 N--> '))     #

        res=  cnt_bin(N)

        print(res)

        print('二進制計算 N+1 時所需的進位次數 --> ',res)

    except:

        break


>>> %Run a414.py

a414: 位元運算之進位篇

請輸入一個十進制正整數 N--> 1

1

二進制計算 N+1 時所需的進位次數 -->  1

請輸入一個十進制正整數 N--> 4

0

二進制計算 N+1 時所需的進位次數 -->  0

請輸入一個十進制正整數 N--> 7

3

二進制計算 N+1 時所需的進位次數 -->  3

請輸入一個十進制正整數 N--> 17

1

二進制計算 N+1 時所需的進位次數 -->  1

請輸入一個十進制正整數 N--> 

>>> 

Python a410: 解二元一次方程式

a410: 解二元一次方程式

'''

二元一次方程组的练习题铺天盖地地涌向同学们,同学们正苦恼于一次次地四则运算、移项、合并同类项等等。

  他们知道你很聪明,想请你帮他们编一个解二元一次方程组的程序。

  我们假定二元一次方程组的一般格式如下:(a,b,c,d,e,f为常数,x,y为未知数)

    ax+by=c

    dx+ey=f

  程序读入a,b,c,d,e,f后,输出解。

  当然,方程组也有可能存在无解或有无穷解的情况:如果(x,y)没有相对应的实数对满足方程组则无解;相反,如果(x,y)有多组对应的实数对满足方程组则有无数解。

  如果无解,就输出“No answer”;如果有无穷解,就输出“Too many”。


ax+by=c

dx+ey=f


Δ  = |a  b|  = a*e - b*d

       |d  e|


Δx = |c  b| = c*e - b*f

        |f   e|


Δy = |a  c| = a*f - c*d

        |d  f|


1.

Δ不為0

x = Δx/Δ

y = Δy/Δ  ---> 此方程式有一組解


2.

若Δ=0且Δx,Δy也為0,則此二元一次方程式有無限多組解


3.

若Δ=0但Δx,Δy不為0,則此二元一次方程式無解

'''

print ('a410: 解2元1次方程式  ax+by=c , dx+ey=f')

while True:

    try:

        a, b, c, d, e, f = map(int, input('請輸入6個整数,a,b,c,d,e,f --> ').split(' '))    # 將輸入的六個數字分配給 a、b、c、d、e、f 變數

        delta= a*e-d*b

        delta_x =  (c*e-f*b)

        delta_y = a*f-d*c

        print( delta ,  delta_x ,  delta_y)

        

        if (delta != 0):     # 如果分母不為 0

            x =str( round (delta_x / delta  ,2 ) )# 根據公式算出 x

            y =str( round (delta_y / delta  ,2 ) )# 根據公式算出 y

            print('此方程式有一組解')

            print('x=', x)

            print('y=', y)

        else:                 # 如果分母為 0

            if (delta_x == 0 ) and  (delta_y == 0) :

                print('Too many')    # 如果分子為 0,則有無窮解 ( x 和 y 可以是任意數 )

            else:

                print('No answer')   # 分子不為零則無解

    except:

        break



>>> %Run a410.py

a410: 解2元1次方程式  ax+by=c , dx+ey=f

請輸入6個整数,a,b,c,d,e,f --> 1 1 2 1 -1 0

-2 -2 -2

此方程式有一組解

x= 1.0

y= 1.0

請輸入6個整数,a,b,c,d,e,f --> 1 1 2 2 0 0

-2 0 -4

此方程式有一組解

x= -0.0

y= 2.0

請輸入6個整数,a,b,c,d,e,f --> 

>>> 

2022年8月25日 星期四

Python a291: nAnB problem

 a291: nAnB problem

#a291: nAnB problem

'''

題目會先提供一組正確的四位數字密碼,接著會有數組猜密碼的數字,

對於每組嘗試的密碼,若有 p 個數字的值正確且在正確的位子上,輸出 pA,

另外有 q 個數字的值正確,

但不在正確的位子上,輸出 qB,將 AB 組合為 pAqB 輸出。


輸入說明

多筆輸入。

第一行有四個介於0-9之間的數字,代表正確的密碼

第二行有一個整數n,1<=n<=10000,代表接下來嘗試n組密碼

接下來有n行,每行有四個介於0-9之間的數字,每行各代表一組嘗試的密碼。


輸出說明

輸出n行。

對於每組嘗試的密碼,若有p個數字的值正確,且在正確的位子上,

另外有q個數字的值正確,但不在正確的位子上,

輸出pAqB。

範例見測資。

範例輸入 #1

1 2 3 4

4

1 1 4 5

1 2 4 3

1 1 4 4

4 3 2 1

範例輸出 #1

1A1B

2A2B

2A0B

0A4B


'''

print('a291: nAnB problem')

num = int(input('輸入測資的筆數-->'))      # 題目次數

pwd1 = [int(i) for i in input('輸入四個介於0-9之間的數字,代表正確的密碼-->').split(' ')]     

for j in range(num):    # 重複幾題

    try:    

        pwd2 = [int(j) for j in input('輸入四個介於0-9之間的數字,代表嘗試的密碼-->').split(' ')]    

       

    except:

        print('結束')              # 程式結束

    print (pwd1,pwd2)

    sum1=sum2=0

    c=list(pwd1)

    #print (c)

    

    for i in range (num):

        if(pwd2[i]==c[i]):

            sum1=sum1+1

            pwd2[i]='c',

            c[i]='c';

            

    for i in range (0,4 ):

        for j in range (0,4):

            if(c[j]==pwd2[i] and  c[j]!='c' and pwd2[i]!='c'):

                        sum2=sum2+1

                        pwd2[i]='c'

                        c[j]='c';

    

    print(sum1,'A',sum2,'B')   



>>> %Run a291.py

a291: nAnB problem

輸入測資的筆數-->4

輸入四個介於0-9之間的數字,代表正確的密碼-->1 2 3 4

輸入四個介於0-9之間的數字,代表嘗試的密碼-->1 1 4 5

[1, 2, 3, 4] [1, 1, 4, 5]

1 A 1 B

輸入四個介於0-9之間的數字,代表嘗試的密碼-->1 2 4 3

[1, 2, 3, 4] [1, 2, 4, 3]

2 A 2 B

輸入四個介於0-9之間的數字,代表嘗試的密碼-->1 1 4 4

[1, 2, 3, 4] [1, 1, 4, 4]

2 A 0 B

輸入四個介於0-9之間的數字,代表嘗試的密碼-->4 3 2 1

[1, 2, 3, 4] [4, 3, 2, 1]

0 A 4 B

>>> 

2022年8月24日 星期三

Python a271: 彩色蘿蔔

 a271: 彩色蘿蔔

'''

題目會先提供測試的數量,接著提供第二筆資料 x、y、z、w、n,、m 六個數字,

六個數字分別代表「紅蘿蔔吃了胖 xg,白蘿蔔吃了胖 yg,黃蘿蔔吃了瘦 zg,

發霉的蘿蔔吃了瘦 wg ( 附加中毒 ),

中毒會使兔子每天瘦 ng ( 中毒當天不算 ),中毒狀態可累加,

m 是兔子初始的體重 ( 早上先中毒,晚上才吃東西 )。


接著第三筆資料為一串每天吃什麼的對照數字,1 代表紅蘿蔔,

2 代表白蘿蔔,3 代表黃蘿蔔,4 代表黑蘿蔔,0 代表沒吃。

如果體重有在任意時刻少於等於 0,輸出:「bye~Rabbit」,

不然就印出結束時的體重。


'''


num = int(input('輸入測資的筆數-->'))      # 題目次數

for j in range(num):    # 重複幾題

    x,y,z,w,n,m = map(int, input('第一行是x,y,z,w,n,m-->').split())       # 取得  x、y、z、w、n,、m 的數字

    role = {'0':0, '1':x, '2':y, '3':-z, '4':-w}  # 定義吃蘿蔔對應的字典檔

    try:

        days = input('第二行一串數字,1紅蘿蔔,2白蘿蔔,3黃蘿蔔,4黑蘿蔔,0代表沒吃-->').split()      # 取得每天的狀態

        gg = 0                      # 中毒幾次

        for i in days:

            print(i,end='')  

            m = m - gg*n              # 每天體重因為中毒變成多少

            if m <= 0: break        # 如果體重小於 0,跳出迴圈

            if i == '4':

                gg =  1  # 如果狀態為 4,中毒次數增加 1

            m = m + role[i]           # 體重因為狀態增加或減少

            print ('--',m)

            if m <= 0: break          # 如果體重小於 0,跳出迴圈

    

        if m <= 0:

              print('\n bye~Rabbit')       # 如果體重小於等於 0,印出 bye~Rabbit

        else:

              print('\n體重=> ',f'{m}g')            # 如果體重大於 0,印出體重

  

    except:

        print(f'{m}g')              # 如果程式中途結束,印出體重


Python 3.7.9 (bundled)

>>> %Run a271.py

輸入測資的筆數-->1

第一行是x,y,z,w,n,m-->5 3 2 4 3 10

第二行一串數字,1紅蘿蔔,2白蘿蔔,3黃蘿蔔,4黑蘿蔔,0代表沒吃-->1 1 2 3 3 3 3 4 3 3

1-- 15

1-- 20

2-- 23

3-- 21

3-- 19

3-- 17

3-- 15

4-- 11

3-- 6

3-- 1


體重=>  1g

>>> %Run a271.py

輸入測資的筆數-->1

第一行是x,y,z,w,n,m-->5 3 2 4 3 10

第二行一串數字,1紅蘿蔔,2白蘿蔔,3黃蘿蔔,4黑蘿蔔,0代表沒吃-->1 1 2 3 3 3 3 4 3 3 2 2 2 2 2 2 2

1-- 15

1-- 20

2-- 23

3-- 21

3-- 19

3-- 17

3-- 15

4-- 11

3-- 6

3-- 1

2

 bye~Rabbit

>>> 

Python a263: 日期差幾天

 a263: 日期差幾天

#a263: 日期差幾天

'''

給你兩個日期,問這兩個日期相差幾天。


輸入說明

輸入有多筆測資,每筆測資有兩行,每行有三個整數依序是年、月、日。

輸入以 EOF 作為結束,題目保證不會有不符合的測資出現。


範例輸入 #1

2011 10 19

2011 10 18


輸出說明

輸出兩個日期差幾天。

範例輸出 #1

1


'''

print ('給你兩個日期,問這兩個日期相差幾天。')


import datetime     # 匯入 datetime 函式庫

while True:

  try:

    d1 = [int(i) for i in input('每筆測資有兩行,每行有三個整數依序是年、月、日。-->').split(' ')]      # 將第一個日期換成數字串列

    d1_day=datetime.datetime(d1[0], d1[1], d1[2])  # 使用 datetime 函式庫取得 datetime 物件


    d2 = [int(i) for i in input('輸入三個整數依序是年、月、日。-->').split(' ')]      # 將第二個日期換成數字串列

    d2_day=datetime.datetime(d2[0], d2[1], d2[2])  # 使用 datetime 函式庫取得 datetime 物件


    print('相差',abs((d1_day - d2_day).days),'天')             # 使用 days 取得天數,並印出天數相減的結果

  except:

    break


>>> %Run a263.py

給你兩個日期,問這兩個日期相差幾天。

每筆測資有兩行,每行有三個整數依序是年、月、日。-->2022 1 1

輸入三個整數依序是年、月、日。-->2022 8 24

相差 235 天

每筆測資有兩行,每行有三個整數依序是年、月、日。-->

>>> 


參考 https://steam.oxxostudio.tw/category/python/zerojudge/a263.html

2022年8月23日 星期二

Python a248: 新手訓練 ~ 陣列應用

a248: 新手訓練 ~ 陣列應用


 #a248: 新手訓練 ~ 陣列應用

'''

大家都知道,小算盤的小數運算只能算出小數點後三十幾位

但好奇的桑葉想知道更精準的小數值 

請你幫可憐的桑葉做出可以算出精準的小數運算的程式


輸入說明

每次輸入有三個正整數 a , b , N 

1<= a , b <= 2147483647      1 <= N <= 10000  

( 輸入不會超過1000筆 ) 


輸出說明

請輸出 a / b 的小數運算結果 

精準到小數點後N位

第N位以後請無條件捨去


範例輸入 #1

18467 41 10

26500 6334 10

15724 19169 10

10 5 3


範例輸出 #1

450.4146341463

4.1837701294

0.8202827481

2.000


hello = 'Hello world'

print(hello[-4:])      # 從 0 到 4 切出子字串

print(hello[:-4])       # 從 0 開始,第一個索引可以省略

orld

Hello w

>


'''   

print('a248: 新手訓練 ~ 陣列應用')

print('每次輸入有三個正整數 a , b , N ')

print('1<= a , b <= 2147483647      1 <= N <= 10000')


while True:

  try:

    a, b, c = map(int, input('每次輸入有三個正整數 a , b , N--> ').split(' '))   # 將題目給予的字串拆分成 a、b、c 三個數字

    rd = a*(10**c)//b    # 乘以 10^位數 後除以 b 求整數

    #print (rd)

    rs = str(rd)         # 將整數轉成字串

    #print (rs)

    

    if len(rs) < c:      # 如果字串的長度不足位數

      for i in range(c - len(rs)):

        rs = '0' + rs    # 將字串前方補 0

        

    m = rs[(c*-1):]      # 根據位數拆分字串 ( 小數點後段 )

    n = rs[:(c*-1)]      # 根據位數拆分字串 ( 小數點前段 )

    

    print (rs , c*-1,c)

    print (n,m)

    if n == '': n = '0'  # 如果前段為空字串,就補 0

    print(f'{n}.{m}')    # 加上小數點,印出結果

  except:

    break



Python 3.7.9 (bundled)

>>> %Run a248.py

a248: 新手訓練 ~ 陣列應用

每次輸入有三個正整數 a , b , N 

1<= a , b <= 2147483647      1 <= N <= 10000

每次輸入有三個正整數 a , b , N--> 18467 41 10

4504146341463 -10 10

450 4146341463

450.4146341463

每次輸入有三個正整數 a , b , N--> 26500 6334 10

41837701294 -10 10

4 1837701294

4.1837701294

每次輸入有三個正整數 a , b , N--> 15724 19169 10

8202827481 -10 10

 8202827481

0.8202827481

每次輸入有三個正整數 a , b , N--> 10 5 15

2000000000000000 -15 15

2 000000000000000

2.000000000000000

每次輸入有三個正整數 a , b , N--> 

>>> 


========================================

print('a248: 新手訓練 ~ 陣列應用')

print('每次輸入有三個正整數 a , b , N ')

print('1<= a , b <= 2147483647      1 <= N <= 10000')


while True:

  try:

    a, b, c = map(int, input('每次輸入有三個正整數 a , b , N--> ').split(' '))   # 將題目給予的字串拆分成 a、b、c 三個數字

    d=float(a/b)

    print (f'{d:.{c}f}')

    

 

  except:

    break


>>> %Run a248-1.py

a248: 新手訓練 ~ 陣列應用

每次輸入有三個正整數 a , b , N 

1<= a , b <= 2147483647      1 <= N <= 10000

每次輸入有三個正整數 a , b , N--> 10 5 20

2.00000000000000000000

每次輸入有三個正整數 a , b , N--> 18467 41 10

450.4146341463

每次輸入有三個正整數 a , b , N--> 26500 6334 20

4.18377012946005688576

每次輸入有三個正整數 a , b , N--> 15724 19169 10

0.8202827482

每次輸入有三個正整數 a , b , N--> 

>>> 

Python a244: 新手訓練 ~ for + if

a244: 新手訓練 ~ for + if 

#a244: 新手訓練 ~ for + if

'''

有三個正整數 a , b , c


輸入說明

第一行有一個正整数N,


代表接下來有N行每行有三個正整數 a , b , c    


 ( 1 <= b , c <= 2147483647 )


 ( 1 <= a <= 4 )

 

 輸出說明

如果 a = 1  請輸出  b+c 


如果 a = 2  請輸出  b-c 


如果 a = 3  請輸出  b*c 


如果 a = 4  請輸出  b/c  


結果請用整数輸出


範例輸入 #1

4

1 2 3

2 2 3

3 2 3

4 2 3


範例輸出 #1

5

-1

6

0


'''

print('a244: 新手訓練 ~ for + if')

while True:

    a,b1,c1 = map(str,input("\n輸入 三個正整數 a , b , c   ( 1 <= a <= 4 )  --> :").split())

    if a =='0' or b1 =='0' or c1=='0':

        print('程式結束')

        break

    b=int(b1)

    c=int(c1)

        

    if  (a=='1'):

        print ('b+c=',b+c)

    elif  (a=='2'):

        print ('b-c=',b-c)

    elif  (a=='3'):

        print ('b*c=',b*c)

    elif  (a=='4'):

        print ('b/c=',int(b/c))

    else:

        print ('1 <= a <= 4',a)



>>> %Run a244.py
a244: 新手訓練 ~ for + if

輸入 三個正整數 a , b , c   ( 1 <= a <= 4 )  --> :1 2 3
b+c= 5

輸入 三個正整數 a , b , c   ( 1 <= a <= 4 )  --> :1 4 5
b+c= 9

輸入 三個正整數 a , b , c   ( 1 <= a <= 4 )  --> :2 4 5
b-c= -1

輸入 三個正整數 a , b , c   ( 1 <= a <= 4 )  --> :3 4 5
b*c= 20

輸入 三個正整數 a , b , c   ( 1 <= a <= 4 )  --> :4 56 9
b/c= 6

輸入 三個正整數 a , b , c   ( 1 <= a <= 4 )  --> :0 0 0
程式結束

Python a229: 括號匹配問題

a229: 括號匹配問題


 #-*- coding: utf-8 -*

'''

#除了要加上# -*- coding: utf-8 -*-外,中文字串必須是Unicode字串:

請寫一個程式把所有合法括號匹配方式列出來!   

Ex. (())  ,  ((()())) , ()((()))  是合法的匹配方式 

      )( , (()))(  , ()(()(  是不合法的匹配方式

合法匹配的括號 , 從答案列的開頭到答案列某一點,左括弧次數永遠大於等於右括弧!  


輸入說明

輸入一個正整數 N , 1 =< N <= 13 。

N 代表有幾組括號要匹配

Ex.

      N = 1 代表 一組括號 ()

      N = 2 代表有兩組括號  ()() 

輸出說明

輸出 N 組括號的所有合法匹配組合   

輸出方式請見範例

範例輸入 #1

1

2

3

4

範例輸出 #1

()

 

(())

()()

 

((()))

(()())

(())()

()(())

()()()


(((())))

((()()))

((())())

((()))()

(()(()))

(()()())

(()())()

(())(())

(())()()

()((()))

()(()())

()(())()

()()(())

()()()()


'''

num=0

def pa(le , ri , n):

    if (n==2*num) : # {//終止遞迴 

        for i in range (0 , 2*num):

            print(qu[i],end='') 

        print("\n") 

        return;


    if (le<num):  # {//le表示已經加入的左小括號個數,從0開始不能超過或等於num 

        qu.append('(') 

        pa(le+1,ri,n+1)  #//多了一個左小括號le+1,n+1為已經加入的左與右小括號個數 

        qu.pop()

        

    if ((le>ri) and (ri<num)): #//左小括號要大於右小括號數,且右小括號數要小於num 

        qu.append(')') 

        pa(le,ri+1,n+1)  #//多了一個右小括號ri+1,n+1為已經加入的左與右小括號個數

        qu.pop()



#=======================

from collections import deque

qu = deque()

#deque一個類似 list 的容器,可以快速的在頭尾加入 (append) 元素與移除 (pop) 元素

while True:

    n = (input('\n一個正整數n, (EOF 為結束)  -->'))

    if n == '':

        print('程式結束')

        break

    

    num=int(n)

    pa(0,0,0);


'''

# Python program to

# demonstrate stack implementation

# using collections.deque

 

from collections import deque

 

stack = deque()

 

# append() function to push

# element in the stack

stack.append('a')

stack.append('b')

stack.append('c')

 

print('Initial stack:')

print(stack)

 

# pop() function to pop

# element from stack in

# LIFO order

print('\nElements popped from stack:')

print(stack.pop())

print(stack.pop())

print(stack.pop())

 

print('\nStack after elements are popped:')

print(stack)

 

# uncommenting print(stack.pop())

# will cause an IndexError

# as the stack is now empty

Output

Initial stack:

deque(['a', 'b', 'c'])


Elements popped from stack:

c

b

a


Stack after elements are popped:

deque([])

'''

參考 https://sites.google.com/site/zsgititit/home/jin-jiec-cheng-shi-she-ji/a229-kuo-hao-pi-pei-wen-ti


Python 3.7.9 (bundled)

>>> %Run a229.py


一個正整數n, (EOF 為結束)  -->1

()



一個正整數n, (EOF 為結束)  -->2

(())


()()



一個正整數n, (EOF 為結束)  -->3

((()))


(()())


(())()


()(())


()()()



一個正整數n, (EOF 為結束)  -->4

(((())))


((()()))


((())())


((()))()


(()(()))


(()()())


(()())()


(())(())


(())()()


()((()))


()(()())


()(())()


()()(())


()()()()



一個正整數n, (EOF 為結束)  -->5

((((()))))


(((()())))


(((())()))


(((()))())


(((())))()


((()(())))


((()()()))


((()())())


((()()))()


((())(()))


((())()())


((())())()


((()))(())


((()))()()


(()((())))


(()(()()))


(()(())())


(()(()))()


(()()(()))


(()()()())


(()()())()


(()())(())


(()())()()


(())((()))


(())(()())


(())(())()


(())()(())


(())()()()


()(((())))


()((()()))


()((())())


()((()))()


()(()(()))


()(()()())


()(()())()


()(())(())


()(())()()


()()((()))


()()(()())


()()(())()


()()()(())


()()()()()



一個正整數n, (EOF 為結束)  -->

程式結束

>>> 

Python a225: 明明愛排列

 a225: 明明愛排列

#a225: 明明愛排列

'''

可惜,沒有下一題叫做「列排愛明明」,明明系列即將在這裡告一段落,謝謝大家這幾天來的支持!


明明喜歡把數字排成一列--用他自己的方式!

他首先先看個位數,把個位數由小到大排。接著,如果個位數字一樣的話,他會將這些數字,由大至小排。

例如,如果數字有 38 106 98 26 13 46 51 的話,那麼 51 會排最前面,因為個位數字 1 是其中最小的一個。

而 106 26 46 這三個數字,個位數同樣都是 6,所以明明會直接將他們由大至小排,也就是 106 46 26。

所以,排好之後是:51 13 106 46 26 98 38,請你幫他輸出最終結果吧!


輸入說明

有多組測試資料,以 EOF 結束。

每組測試資料以一個 n(<=1000) 開始,表示明明拿到了幾個數字。接著有 n 個以空白隔開的整數。


輸出說明

請輸出排序後的結果,以空白隔開。


範例輸入 #1

7

38 106 98 26 13 46 51

6

1 2 3 4 5 0

5

98 76 12 34 55

6

33 33 88 88 83 38


51 13 106 46 26 98 38

0 1 2 3 4 5

12 34 55 76 98

83 33 33 88 88 38


'''

print('a225: 明明愛排列')

print('先看個位數,把個位數由小到大排。')

print('接著,如果個位數字一樣的話,他會將這些數字,由大至小排。')

while True:

  try:

    nums = [int(i) for i in input('測試資料,以 EOF 結束-->').split(' ')]   # 將輸入的字串轉換成數字串列

    nums.sort(reverse=True)           # 先將串列由大到小排序

    print('串列由大到小排序-->',nums)

    nums.sort(key=lambda s: s%10)     # 使用 lambda 匿名函式,根據除以 10 的餘數由小到大排列

    print('結果-->',*nums)   # 使用 *args 運算子打散串列並輸出

  except:

    break


參考 https://steam.oxxostudio.tw/category/python/zerojudge/a225.html



>>> %Run a225.py

a225: 明明愛排列

先看個位數,把個位數由小到大排。

接著,如果個位數字一樣的話,他會將這些數字,由大至小排。

測試資料,以 EOF 結束-->1 2 3 4 5 0

串列由大到小排序--> [5, 4, 3, 2, 1, 0]

結果--> 0 1 2 3 4 5

測試資料,以 EOF 結束-->33 33 88 88 83 38

串列由大到小排序--> [88, 88, 83, 38, 33, 33]

結果--> 83 33 33 88 88 38

測試資料,以 EOF 結束-->38 106 98 26 13 46 51

串列由大到小排序--> [106, 98, 51, 46, 38, 26, 13]

結果--> 51 13 106 46 26 98 38

測試資料,以 EOF 結束-->

>>> 

2022年8月22日 星期一

Python a224: 明明愛明明

a224: 明明愛明明 

#a224: 明明愛明明

'''

一看題名,你就該知道,這次跟迴文脫不了關係!

若你不確定什麼是「迴文」,請看 Google 字典的解釋:


迴文 huíwén


一種修辭方式。

通過詞語反復迴環使用,表達二者互相依存或彼此制約的關係,

如“人人為我,我為人人”、“饒人不癡漢,癡漢不饒人”。


輸入說明

一筆測試資料一行,包含許許多多但總數不超過 1000 個的大小寫英文字母和標點符號。

不可思議的是,裡面不會有任何空白字元。

輸出說明

如果重新安排順序後,有辦法讓這一堆英文字母變成迴文的話,輸出「yes !」,否則輸出「no...」。

注意,大寫和小寫字母視為相同,即 A 和 a 是一樣的,並且,請忽視所有非英文字母的字元。


範例輸入 #1

ababa

bbaaa

Level

aaabbbcc

abcdefg

HowAreYouToday

A_man,_a_plan,_a_canal:_Panama.


yes !

yes !

yes !

no...

no...

no...

yes !


'''

def reversed_string(text):

    if len(text) == 1:

        return text

    else:

        return reversed_string(text[1:]) + text[:1]


print('a224: 明明愛明明')

print('一看題名,你就該知道,這次跟迴文脫不了關係!')

print('若你不確定什麼是「迴文」,請看 Google 字典的解釋:迴文')

while True:

    s = (input('\n一個正整數n, (EOF 為結束)  -->'))

    if s == '':

        print('程式結束')

        break

    c = s.lower()

    c1 = list(c)

    #print(c1,len(c1))

    s1=''

    for i  in range (0,len(c1)) :  #'去除輸入字串中的特殊字元,轉存到 s1

        if (c1[i] >= "a" and c1[i] <= "z")  or (c1[i] >= "0"  and c1[i] <= "9"): 

            s1 = s1+s1.join(c1[i])

            #print(s1)

    print(str(s1),str(s1)[::-1] )

    

    if str(s1) == str(s1)[::-1] :

        print("Palindrome 迴文")

    else:

        print("Not Palindrome 不是迴文")

    '''

    s=s.lower()

    a=reversed_string(s)

    print(s,a)

    if (s==a):

        print('yes')

    else:

        print('No')'''


Python 3.7.9 (bundled)

>>> %Run a224.py

a224: 明明愛明明

一看題名,你就該知道,這次跟迴文脫不了關係!

若你不確定什麼是「迴文」,請看 Google 字典的解釋:迴文


一個正整數n, (EOF 為結束)  -->Level

level level

Palindrome 迴文


一個正整數n, (EOF 為結束)  -->ababa

ababa ababa

Palindrome 迴文


一個正整數n, (EOF 為結束)  -->bbaaa

bbaaa aaabb

Not Palindrome 不是迴文


一個正整數n, (EOF 為結束)  -->A_man,_a_plan,_a_canal:_Panama.

amanaplanacanalpanama amanaplanacanalpanama

Palindrome 迴文


一個正整數n, (EOF 為結束)  -->

程式結束

>>> 

Python a216: 數數愛明明

a216: 數數愛明明


 #a216: 數數愛明明


'''

數數是班上聰明又漂亮的女生,有一天……,她愛上了明明。

她對明明說:「我們的愛,若是錯誤,願你我沒有白白受苦。

呃,不是,我們的愛就像是函數!」

明明說,「是啊,我對妳的愛是與日俱增呢!」

數數開心地說,「你的意思是,你在第 n 天對我的愛

若用函數 f(n) 來描述,那麼,f(n) = n + f(n-1)。

也就是說,每一天都比前一天多了一單位的愛,並且與舊的愛累積起來嗎?」

明明點了點頭,然後問,「那麼,妳呢?」

數數說,「我在第 n 天對你的愛若是 g(n),則會滿足

g(n) = f(n) + g(n-1) 關係!」


於是,明明笑了笑,摟著數數說,我一定會更加愛妳的!


註:在第一天的時候,f(1) = g(1) = 1。


輸入說明

輸入以 EOF 結束。每一筆測試資料有一個數字 n,其中 n > 0。 

此外,50% 的測資 n <= 500;80% 的測資,n <= 3000;全部的測資 n <= 30000。


輸入說明

輸入以 EOF 結束。每一筆測試資料有一個數字 n,其中 n > 0。 

此外,50% 的測資 n <= 500;80% 的測資,n <= 3000;全部的測資 n <= 30000。



'''

print('a216: 數數愛明明')

while True:

    n = (input('\n一個正整數n, (EOF 為結束)  -->'))

    sum1=0

    if n == '':

        print('程式結束')

        break

    

    N1=int(n)

    fn=gn=prevFn= prevGn=0 

    for i in range (1,N1+1):

        fn= i+ prevFn;

        gn= fn+ prevGn;

        prevFn= fn;

        prevGn= gn;

        #print(i,fn,gn)

    print(fn,gn)

        



>>> %Run a216.py

a216: 數數愛明明


一個正整數n, (EOF 為結束)  -->1

1 1


一個正整數n, (EOF 為結束)  -->2

3 4


一個正整數n, (EOF 為結束)  -->3

6 10


一個正整數n, (EOF 為結束)  -->5

15 35


一個正整數n, (EOF 為結束)  -->8

36 120


一個正整數n, (EOF 為結束)  -->13

91 455


一個正整數n, (EOF 為結束)  -->

程式結束

>>> 

>>> %Run a216.py

a216: 數數愛明明


一個正整數n, (EOF 為結束)  -->1

1 1 1


一個正整數n, (EOF 為結束)  -->2

1 1 1

2 3 4


一個正整數n, (EOF 為結束)  -->3

1 1 1

2 3 4

3 6 10


一個正整數n, (EOF 為結束)  -->5

1 1 1

2 3 4

3 6 10

4 10 20

5 15 35


一個正整數n, (EOF 為結束)  -->8

1 1 1

2 3 4

3 6 10

4 10 20

5 15 35

6 21 56

7 28 84

8 36 120


一個正整數n, (EOF 為結束)  -->13

1 1 1

2 3 4

3 6 10

4 10 20

5 15 35

6 21 56

7 28 84

8 36 120

9 45 165

10 55 220

11 66 286

12 78 364

13 91 455


一個正整數n, (EOF 為結束)  -->

程式結束

>>> 

Python a215: 明明愛數數

 a215: 明明愛數數

#a215: 明明愛數數

'''

明明是一個愛數(ㄕㄨˇ)數(ㄕㄨˋ)的好學生,這天媽媽叫他從 n 開始數

,下一個數字是 n+1,再下一個數字是 n+2,以此類推。媽媽想知道,

明明數了幾個數字之後,他數過的這些數字的總和會超過 m。請幫助明明的媽媽吧。

輸入說明

輸入以 EOF 結束。每一筆測試資料有兩個數字,

分別為 n 和 m,其中 m-n 不會超過 10^5。


輸出說明

輸出如題目敘述。


範例輸入 #1

1 5

5 10

100 1000


範例輸出 #1

3

2

10


100 , 1000 需要10總和會超過1000

100

101 201

102 303

103 406

104 510

105 615

106 721

107 828

108 936

109 1045

110 1155

111 1266


'''

while True:

    try:

        n,m = map(int,input("\n輸入 兩個數正整數a,b(1<=a<=b)(0≦a≦b≦1000) : ").split())

        if n ==0 or m ==0 :

            print('程式結束')

            break

    except:

         print ("Invalid input 不合法輸入")

         continue

    #a,b = map(int,input("\n 輸入 兩個數正整數a,b(1<=a<=b)(0≦a≦b≦1000) : ").split())

    sum1=0

    sum2=0

    for i in range(10000):

        sum1=sum1+n

        n=n+1

        sum2=sum2+1

        if (sum1 >=m) :

            print (sum1,'大於',m, end='-->')

            print ('共有' ,sum2,'次')

            break

        




Python 3.7.9 (bundled)

>>> %Run a215.py


 輸入 兩個數正整數a,b(1<=a<=b)(0≦a≦b≦1000) : 1 5

6 大於 5-->共有 3 次


 輸入 兩個數正整數a,b(1<=a<=b)(0≦a≦b≦1000) : 5 10

11 大於 10-->共有 2 次


 輸入 兩個數正整數a,b(1<=a<=b)(0≦a≦b≦1000) : 100 1000

1045 大於 1000-->共有 10 次


 輸入 兩個數正整數a,b(1<=a<=b)(0≦a≦b≦1000) : 0 0

程式結束

>>> 

Python a149: 乘乘樂

 a149: 乘乘樂

#a149: 乘乘樂

'''

你拿到一個整數,卻忍不住想把每個位數都乘在一起。

例如看到 356 就會想要知道 3 * 5 * 6 的值為何。

快寫個程式幫幫為了乘數字而快發瘋的自己吧!


輸入說明

一開始有一個數字 T,表示共有幾組測試資料。

接下來有 T 個數字 n (0 <= n < 2147483648)。

輸出說明

輸出可以拯救自己的結果。


範例輸入 #1

3

356

123

9999


範例輸出 #1

90

6

6561

'''


print('看到 356 就會想要知道 3 * 5 * 6 的值為何')

while True:

    n = (input('\n一個正整數n, (EOF 為結束)  -->'))

    if n == '':

        print('程式結束')

        break

    N1=int(n)

    b=[]

    for i in range (0,N1):

        sum1=1

        a =  input("輸入n個數字:--> ")

        print(a)

        b=list(a)

        print("\nList is - ", b)

        

        for i in range(0,len(a)):

            sum1=sum1*int(b[i])

        print('乘數字-->',sum1)

        



Python 3.7.9 (bundled)

>>> %Run a149.py

看到 356 就會想要知道 3 * 5 * 6 的值為何


一個正整數n, (EOF 為結束)  -->3

輸入n個數字:--> 356

356


List is -  ['3', '5', '6']

乘數字--> 90

輸入n個數字:--> 123

123


List is -  ['1', '2', '3']

乘數字--> 6

輸入n個數字:--> 9999

9999


List is -  ['9', '9', '9', '9']

乘數字--> 6561


一個正整數n, (EOF 為結束)  -->0


一個正整數n, (EOF 為結束)  -->

程式結束

>>> 

Python a148: You Cannot Pass?!

a148: You Cannot Pass?! 

#a148: You Cannot Pass?!

'''

你考了 n 科筆試題目,每科的滿分都是 100 分。老師說,如果平均大於 59 你就過關了。

輸入說明

輸入第一行為一個數字 n,接著有 n 個正整數。


輸出說明

若你被當了,請輸出「yes」,否則輸出「no」。


範例輸入 #1

1 60

3 0 80 75

5 61 61 61 61 50


範例輸出 #1

no

yes

no

'''

print('考了 n 科筆試題目,每科的滿分都是 100 分。老師說,如果平均大於 59 你就過關了。')

while True:

    n = (input('\n一個正整數n, (EOF 為結束)  -->'))

    sum1=0

    if n == '':

        print('程式結束')

        break

    N1=int(n)

    a = list(map(int,input("輸入n個可以用int儲存的正整數: ").strip().split()))[:N1]

    print("\nList is - ", a)

    for i in range (0,N1):

        sum1=sum1+int(a[i])

    avg1=int(sum1/N1)

    if (avg1>=59) :

        print('Pass-->no')

    else:

        print('Fail-->yes')



>>> %Run a148.py

考了 n 科筆試題目,每科的滿分都是 100 分。老師說,如果平均大於 59 你就過關了。


一個正整數n, (EOF 為結束)  -->1

輸入n個可以用int儲存的正整數: 60


List is -  [60]

Pass-->no


一個正整數n, (EOF 為結束)  -->3

輸入n個可以用int儲存的正整數: 0 80 75


List is -  [0, 80, 75]

Fail-->yes


一個正整數n, (EOF 為結束)  -->5

輸入n個可以用int儲存的正整數: 61 61 61 61 55


List is -  [61, 61, 61, 61, 55]

Pass-->no


一個正整數n, (EOF 為結束)  -->

程式結束

>>> 

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...