【編寫程式,輸人一個大於2的自然數,然後輸出小於該數字的所有素數組成的列表。】所謂素數,是指除了1和自身之外沒有其他因數的自然數,最小的素數是2,後面依次是3、5、7、11、13... c++代碼: #include<iostream> #include<bits/stdc++.h> #define ...
【編寫程式,輸人一個大於2的自然數,然後輸出小於該數字的所有素數組成的列表。】所謂素數,是指除了1和自身之外沒有其他因數的自然數,最小的素數是2,後面依次是3、5、7、11、13...
c++代碼:
#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代碼:
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%;
(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中常用的一些數字和字元轉換:
- 整數字元串轉換為對應的整數:int('12')
- 小數字元串轉換為對應小數:float('12.34')
- 數字轉換為字元串:str(123.45)
- ASCII碼轉換為相應字元:chr(97)
- 字元轉換為響應ASCII碼:ord('a')
凱撒加密演算法的原理:把明文中每個英文字母替換為該字母在宇母表中後面第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代碼: