經典問題(c++/python)素數、楊輝三角(金字塔型)、統計單詞數、簡單計算器、密碼安全程度、凱撒密碼加密、漢諾塔 (python課設實驗實例)-- biaobiao88

来源:https://www.cnblogs.com/biaobiao88/archive/2019/12/30/12119975.html
-Advertisement-
Play Games

【編寫程式,輸人一個大於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中常用的一些數字和字元轉換:

  1. 整數字元串轉換為對應的整數:int('12')
  2. 小數字元串轉換為對應小數:float('12.34')
  3. 數字轉換為字元串:str(123.45)
  4. ASCII碼轉換為相應字元:chr(97)
  5. 字元轉換為響應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代碼:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統自身的error處理一般是 errors.New()或fmt.Errorf()等,對一些需要複雜顯示的,不太友好,我們可以擴展下error。 error在標準庫中被定義為一個介面類型,該介面只有一個Error()方法 那麼,自定義error只要擁有Error()方法,就實現了error介面,這裡 ...
  • 場景 Dubbo環境搭建-管理控制台dubbo-admin實現服務監控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103624846 Dubbo搭建HelloWorld-搭建服務提供者與服務消費者並完成遠程調用(附代碼下載) ...
  • 本系列筆記主要基於《深入理解Java虛擬機:JVM高級特性與最佳實踐 第2版》,是這本書的讀書筆記。 在 Java 虛擬機記憶體區域中,除了程式計數器外,其他幾個記憶體區域都可能會發生OutOfMemoryError,這次通過一些代碼來驗證虛擬機各個記憶體區域存儲的內容。 在實際工作中遇到記憶體溢出異常時, ...
  • 一、add 將傳進來的參數添加到原來的值上面。這個過濾器會嘗試將“值”和“參數”轉換成整形然後進行相加。如果轉換成整形過程中失敗了,那麼將會將“值”和“參數”進行拼接。如果是字元串,那麼會拼接成字元串,如果是列表,那麼會拼接成一個列表。實例代碼如下: {{ value|add:"2"}} 如果val ...
  • Composer 是新一代的PHP依賴管理工具。本文介紹使用Composer的五個小技巧,希望能給你的PHP開髮帶來方便。 1. 僅更新單個庫 只想更新某個特定的庫,不想更新它的所有依賴,很簡單 composer update foo/bar 此外,這個技巧還可以用來解決“警告信息問題”。你一定見過 ...
  • 本篇文章主要介紹了PHP組件、框架以及Composer,具有一定的學習價值,感興趣的朋友可以瞭解一下。 什麼是組件 組件是一組打包的代碼,是一系列相關的類、介面和Trait,用於幫助我們解決PHP應用中某個具體問題。例如,你的PHP應用需要收發HTTP請求,可以使用現成的組件如guzzle/guzz ...
  • Composer是一個非常流行的PHP包依賴管理工具,已經取代PEAR包管理器,對於PHP開發者來說掌握Composer是必須的. 對於使用者來說Composer非常的簡單,通過簡單的一條命令將需要的代碼包下載到vendor目錄下,然後開發者就可以引入包並使用了. 其中的關鍵在於你項目定義的comp ...
  • 原先在《演算法競賽入門經典》看過這題,當時沒想出來選擇百度。結果洛谷再次跳出來了。很尷尬,忘了做題方法的我繼續百度。重做了一遍,很慚愧 1 #include <stdio.h> 2 #include <string.h> 3 int main(void) 4 { 5 int a, b; 6 int s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...