【編寫程序,輸人一個大於2的天然數,而後輸出小於該數字的全部素數組成的列表。】所謂素數,是指除了1和自身以外沒有其餘因數的天然數,最小的素數是2,後面依次是三、五、七、十一、13...python
c++代碼:ios
#include<iostream> #include<bits/stdc++.h> #define int long long using namespace std; signed main() { int x; cin >> x; for(int i = 2;i < x;i++) { int flag = 0; for(int j = 2;j <= sqrt(i);j++) { if(i % j == 0) { flag = 1; break; } } if(flag == 0) cout << i << " "; } cout << endl; return 0; }
python代碼:c++
import math a = input("請輸入一個大於2的整數:") for i in range(2,int(a)): flag = 0 for j in range(2,int(math.sqrt(i) + 1)): if i % j == 0: flag = 1 break if flag == 0: print("{} ".format(int(i))) print("\n")
【編寫程序,格式化輸出楊輝三角。】楊輝三角即二項式定理的係數表,各元素知足以下條件:第一列及對角線上的元素均爲1;其他每一個元素等於它上一行同一列元素與前一列元素之和。算法
c++代碼:編程
#include<bits/stdc++.h> #define int long long #define maxx 9999 using namespace std; int a[maxx][maxx]; signed main() { int n; cin >> n; //初始化邊 for(int i = 1;i <= n;i++)//先初始化第一列即對角線的數值,都爲1 { a[i][i] = 1; a[i][1] = 1; } //計算出楊輝三角的各個值 for(int i = 3;i <= n;i++)//從第三行第二列開始 for(int j = 2;j <= i - 1;j++)//每一行所擁有的列數最大值即爲當前行數減一 a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//楊輝三角的性質,當前元素的值=上一行同一列的值+上一行前一列的值 //輸出打印 for(int i = 1;i <= n;i++)//注意觀察如下兩個for循環的邊界條件,之和爲n,這有助於你的理解 { for(int j = 1;j <= n - i;j++)//先打印空格 cout << " "; for(int k = 1;k <= i;k++)//再打印數值(數值後帶一個空格) cout << a[i][k] << " "; cout << endl; } return 0; }
python代碼:數組
import math import numpy as np n = eval(input("請輸入一個整數:")) #a = np.zeros((n,n),dtype = np.int) #下面使用了列表推導式。 array = [([0] * (n + 1)) for i in range(n + 1) ]#Python中正確的構造二維數組,應該使用列表推導式,這樣就很是Python:array = [ [0] * m for i in range(n) ],行和列的數必定要大於已知矩陣的行數和列數,否則會報列表越界等錯誤,這裏要格外的注意 for i in range(1,n + 1): array[i][i] = 1 array[i][1] = 1 for i in range(3,n + 1): for j in range(2,i): array[i][j] = array[i - 1][j - 1] + array[i - 1][j] for i in range(1,n + 1): for j in range(1,n - i + 1): print(" ",end = "") for k in range(1,i + 1): print(array[i][k],end = " ") print("\n",end = "")
【編程計算有固定工資收入的黨員每個月所交納的黨費。】安全
(0,3000] :工資基數3000元及如下者,交納工資基數的0.5%;函數
(3000, 5000] :工資基數3000~5000元者,交納工資基數的1%;加密
(5000,10000] :工資基數在5000~10000元者,交納工資基數的1.5%;spa
(10000,+) :工資基數超過10000元者,交納工資基數的2%。
c++代碼:
#include<iostream> #include<bits/stdc++.h> #define int long long using namespace std; signed main() { float x,y; cout << "請輸入有固定工資收入的黨員的月工資:"; cin >> x; if(0 < x <= 3000) y = x * 0.005; if(3000 < x <= 5000) y = x * 0.01; if(5000 < x <= 10000) y = x * 0.015; if(x > 10000) y = x * 0.02; printf("月工資 = %.0f,交納黨費 = %.1f\n",x,y); return 0; }
python代碼:
import math x = eval(input("請輸入有固定工資收入的黨員的月工資:"))#輸入的時候使用eval函數的話,你鍵入什麼類型的值,待接收的變量就是什麼類型的值,不須要再進行轉換 if 0 < x <= 3000: y = x * 0.005 if 3000 < x <= 5000: y = x * 0.01 if 5000 < x <= 10000: y = x * 0.015 if x > 10000: y = x * 0.02 print("月工資 = {}".format(int(x)),end = ',') print("交納黨費 = {}".format(y))
【統計所輸入字符串中單詞的個數,單詞之間用空格分隔。】
c++代碼:
#include<iostream> #include<bits/stdc++.h> #define int long long using namespace std; signed main() { string str; cout << "請輸入字符串:"; getline(cin,str); int len = str.length(); int flag = 1; for(int i = 0;i < len;i++) if(str[i] == ' ') flag++; cout << "其中的單詞總數有:" << flag << endl; cout << "分別爲:" << endl; for(int i = 0;i < len;i++) if(str[i] != ' ' && str[i] != '.') cout << str[i]; else cout << endl; return 0; }
python代碼:
import math str = input("請輸入字符串:") len1 = len(str) #print(len) flag = 1 for i in range(len1): if str[i] == ' ': flag = flag + 1 print("其中的單詞總數有:{}\n分別爲:\n".format(int(flag)),end = '') for i in range(len1): if(str[i] != ' ' and str[i] != '.'): print(str[i],end = '') else: print("\n",end = '')
【編程實現一個簡單的計算器。】要求輸入兩個操做數和一個操做符(+、-、*、/、%),根據操做符輸出運算結果。注意「/」和「%」運算符的零除異常問題。
c++代碼:
#include<iostream> #include<cmath> #define int long long using namespace std; signed main() { while(1) { double x,y,sum; char z; cout << "請輸入操做數x:"; cin >> x; cout << "請輸入操做數y:"; cin >> y; cout << "請輸入操做符:"; cin >> z; if((z == '/' || z == '%') && y == 0) { cout << "分母=0,零除異常!" << endl; continue; } if(z == '+') { printf("計算結果爲:%.1lf\n",x + y); continue; } if(z == '-') { printf("計算結果爲:%.1lf\n",x - y); continue; } if(z == '*') { printf("計算結果爲:%.1lf\n",x * y); continue; } if(z == '/') { printf("計算結果爲:%.1lf\n",x / y); continue; } if(z == '%') { printf("計算結果爲:%.1lf\n",fmod(x,y)); continue; } } return 0; }
python代碼:
import math x = eval(input("請輸入操做數x:")) y = eval(input("請輸入操做數y:")) z = input("請輸入操做符:") if((z == '/' or z == '%') and y == 0): print("分母=0,零除異常!") else: if(z == '+'): print("計算結果爲:{}".format(float(x + y))) if(z == '-'): print("計算結果爲:{}".format(float(x - y))) if(z == '*'): print("計算結果爲:{}".format(float(x * y))) if(z == '/'): print("計算結果爲:{}".format(float(x / y))) if(z == '%'): print("計算結果爲:{}".format(float(x % y)))
通常地,能夠做爲密碼字符的主要有數字、小寫字母、大寫字母和幾個標點符號。
密碼安全強度主要和字符串的複雜程度有關係,
字符串中包含的字符種類越多,認爲其安全強度越高。
按照這個標準,能夠把安全強度分爲強密碼、中高、中低、弱密碼。
其中,強密碼表示字符串中同時含有數字、小寫字母、大寫字母、標點符號這4類字符,
而弱密碼表示字符串中僅包含4類字符中的1種。
中低強度密碼表示字符串中僅包含4類字符中的2種。
中高強度密碼表示字符串中僅包含4類字符中的3種。
【編寫程序,輸人一個字符串,輸出該字符串做爲密碼時的安全強度。】
c++代碼:
#include<iostream> #define int long long using namespace std; signed main() { string str; int shu = 0,xiaoxie = 0,daxie = 0,fuhao = 0; cin >> str; int len = str.length(); for(int i = 0;i < len;i++) { //數字 if(48 <= str[i] && str[i] <= 57) shu = 1; //大寫字母 if(str[i] <= 90 && str[i] >= 65) daxie = 1; //小寫字母 if(str[i] >= 97 && str[i] <= 122) xiaoxie = 1; //標點符號 if((str[i] >= 32 && str[i] <= 47)||(str[i] >= 58 && str[i] <= 64)) fuhao = 1; } int sum = shu + daxie + xiaoxie + fuhao; if(sum == 1) cout << "弱密碼"; if(sum == 2) cout << "中低密碼"; if(sum == 3) cout << "中高密碼"; if(sum == 4) cout << "強密碼"; return 0; }
python代碼:
import math str = input("請輸入密碼:") len1 = len(str) shu = 0 daxie = 0 xiaoxie = 0 fuhao = 0 for i in range(len1): if(ord(str[i]) >= 48 and ord(str[i]) <= 57): shu = 1 if(ord(str[i]) >= 65 and ord(str[i]) <= 90): daxie = 1 if(ord(str[i]) >= 97 and ord(str[i]) <= 122): shu = 1 if((ord(str[i]) >= 32 and ord(str[i]) <= 47) or (ord(str[i]) >= 58 and ord(str[i]) <= 64)): fuhao = 1 sum = shu + daxie + xiaoxie + fuhao if sum == 1: print("弱密碼") if sum == 2: print("中低密碼") if sum == 3: print("中高密碼") if sum == 4: print("強密碼")
附加python中經常使用的一些數字和字符轉換:
凱撒加密算法的原理:把明文中每一個英文字母替換爲該字母在宇母表中後面第k個字母。
若是後面第k個字符超出字母表的範圍,則把字母表首尾相接。
也就是字母Z的下一個字母是 A,字母z的下一個字母是a。
要求明文中的大寫字母和小寫字母分別進行處理,
大寫字母加密後仍爲大寫字母,小寫字母加密後仍爲小寫字母。
凱撒加密算法是一種經典加密算法,雖然抗攻擊能力很是弱,
如今也沒有很好的應用價值了,但其中的思路仍是值得借鑑的。
【編寫程序:輸入一個字符串做爲待加密的明文,而後輸入一個整數做爲凱撒加密算法的密鑰,最後輸出該字符串使用該密鑰加密後的結果。】
c++代碼:
#include<iostream> #define int long long using namespace std; signed main() { /* 下面給出加解密的公式: 加密公式:f(a) = (a + n) mod 26 解密公式:f(a) = (a + (26 - n)) % 26 */ string str; int n; cout << "請輸入待加密的明文:"; cin >> str; cout << "請輸入密鑰:"; cin >> n; int len = str.length(); //加密 for(int i = 0;i < len;i++) { if(str[i] >= 'A' && str[i] <= 'Z') str[i] = ((str[i] - 'A') + n) % 26 + 'A'; if(str[i] >= 'a' && str[i] <= 'z') str[i] = ((str[i] - 'a') + n) % 26 + 'a'; } //解密 // int nn = 26 - n; // for(int i = 0;i < len;i++) // { // if(str[i] >= 'A' && str[i] <= 'Z') // str[i] = ((str[i] - 'A') + nn) % 26 + 'A'; // if(str[i] >= 'a' && str[i] <= 'z') // str[i] = ((str[i] - 'a') + nn) % 26 + 'a'; // } cout << str; return 0; }
python代碼:
import math str = input("請輸入待加密的明文:") s = list(str)#能夠先將字符串轉換成列表,而後再進行賦值操做,再將其轉變回來 n = eval(input("請輸入密鑰:")) len1 = len(str) for i in range(len1): if(ord(s[i]) >= ord('A') and ord(s[i]) <= ord('Z')): s[i] = chr(((ord(s[i]) - ord('A')) + n) % 26 + ord('A')) if(ord(s[i]) >= ord('a') and ord(s[i]) <= ord('z')): s[i] = chr(((ord(s[i]) - ord('a')) + n) % 26 + ord('a')) str = ''.join(s) print(str)
註釋:
str = "My friend and i hang out together"
str[14] = 'I'
當要實現以上兩個語句時,會發生錯誤:TypeError: 'str' object does not support item assignment
這種錯誤的緣由是string(區別於list)是一種不可變的數據類型,應該用str = str[:14] + 'I' + out_str[15:],代替上面的第二行便可
還有一種方法去解決這個錯誤:
s = '312141'
s[0] = '0'
也會報錯
由於,python中的字符串跟C++的有點不同,python的字符串是一種不可變對象(immutabel object),意味着只讀不寫,線程安全。C++的字符串咱們能夠直接使用s[0]='0’這種語法對字符串中的某個字符賦值,而python不能夠。
在python中,能夠先將字符串轉換成列表,而後再進行賦值操做,再將其轉變回來。
s = '312141'
t = list(s)
t[0] = '0'
s = ''.join(t)
聽說古代有一個梵塔,塔內有3個底座A、B、C,
A座上有64個盤子,盤子大小不等,大的在下,小的在上。
有一個和尚想把這64個盤子從A座移到C座,
但每次只能容許移動一個盤子。
在移動盤子的過程當中能夠利用B座,
但任什麼時候刻3個座上的盤子都必須始終保持大盤在下、小盤在上的順序。
若是隻有一個盤子,則不須要利用B座,直接將盤子從A移動到C便可。
【編寫函數,接收一個表示盤子數量的參數和分別表示源、目標、臨時底座的參數,而後輸出詳細移動步驟和每次移動後3個底座上的盤子分佈狀況。】
c++代碼:
python代碼: