學堂在線 鄭莉C++ 習題3

類與對象ios

最大公約數

題目描述

求兩個正整數a 和 b的最大公約數。c++

要求使用c++ class編寫程序。能夠建立以下class算法

輸入描述函數

兩個正整數a,b,而且1=<a,b <=10000加密

輸出描述spa

a和b的最大公約數設計


樣例輸入code

1000 1000

樣例輸出對象

1000

#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;

class Integer
{
private:
    int num;
public:
    Integer(int n);
    int gcd(Integer b);
};

Integer::Integer(int n)
{
    num = n;
}

int Integer::gcd(Integer b)
{
    int tmp_min = min(num, b.num);
    int tmp_max = max(num, b.num);
    while (tmp_max % tmp_min != 0)
    {
        int i = tmp_max;
        tmp_max = tmp_min;
        tmp_min = i % tmp_max;
    }
    return tmp_min;
}

int main()
{
    int a, b;
    cin >> a >> b;
    Integer A(a);
    Integer B(b);
    cout << A.gcd(B) << endl;
    system("pause");
    return 0;
}

 

移位密碼-解密

題目描述

移位密碼是最簡單的一類代替密碼,具體算法就是將字母表的字母右移k個位置(k<26),k稱爲密鑰,並對字母表長度做模運算。blog

已知加密過程爲:將每一個字母按照字母表的順序右移k位。加密函數:E(m)=(m+k)%26. (明文 -> 密文)

現給你一串密文,所有由大寫字母組成。請破譯出明文!(密文 -> 明文)

請設計實現PassWord類:

class PassWord {

private:

int k;

public:

PassWord(int);

char convert(const char); // 解密函數

};


輸入描述

屬於一個整數k,表明移位密碼的密鑰,k<26。

屬於一個整數n,表明接下來輸入字符的個數,接着輸入n個字符

輸出描述

輸出對應的明文


樣例輸入
1
8 JMPWFZPV
樣例輸出
ILOVEYOU

#include <iostream>
#include <algorithm>
#define MAX_LEN 1000
using namespace std;

char sec[MAX_LEN + 10];

class PassWord {
private:
    int k;
public:
    PassWord(int i);
    char convert(const char c);
};

PassWord::PassWord(int i)
{
    k = i;
}

char PassWord::convert(const char c)
{
    return (c - 'A' - k + 26) % 26 + 'A';
}

int main()
{
    int k, n; //k表明移位的密匙,c表明字符數
    cin >> k >> n;
    PassWord password(k);
    for(int i = 0; i < n; ++ i)
    {
        char a;
        cin >> a;
        sec[i] = password.convert(a);
    }
    for (int i = 0; i < n; ++i)
        cout << sec[i];
    cout << endl;
    system("pause");
    return 0;
}

乘法密碼-加密

題目描述

乘數密碼也是一種替換密碼,其加密變換是將明文字母串逐位乘以密鑰k並進行模運算,數學表達式以下:

E(m) = k*m mod 26 (明文 -> 密文)

現給你一串明文,所有由大寫字母組成,請加密成密文。

請設計實現PassWord類:

class PassWord {

private:

int k;

public:

PassWord(int);

char convert(const char); // 加密函數

};

 

輸入描述

屬於一個整數k,表明乘法密碼的密鑰,0 < k < 26。

屬於一個整數n,表明接下來輸入字符的個數,接着輸入n個字符

輸出描述

輸出對應的密文


樣例輸入
3
8 ILOVEYOU
樣例輸出
YHQLMUQI

#include <iostream>
using namespace std;

char sec[1000];

class PassWord {
private:
    int k;
public:
    PassWord(int t);
    char convert(const char c);
};

PassWord::PassWord(int t)
{
    k = t;
}

char PassWord::convert(const char c)
{
    return (c - 'A') * k % 26 + 'A';
}

int main()
{
    int k, n;
    cin >> k >> n;
    PassWord p(k);
    for (int i = 0; i < n; ++i)
    {
        char a;
        cin >> a;
        sec[i] = p.convert(a);
    }
    for (int i = 0; i < n; ++i)
        cout << sec[i];
    cout << endl;
    system("pause");
    return 0;
}

 

乘法密碼-解密

題目描述

乘數密碼也是一種替換密碼,其加密變換是將明文字母串逐位乘以密鑰k並進行模運算,數學表達式以下:

E(m) = k*m mod 26 (明文 -> 密文)

現給你一串密文,所有由大寫字母組成,請破譯出明文。(密文 -> 明文)

請設計實現PassWord類:

class PassWord {

private:

int k;

public:

PassWord(int);

char convert(const char); // 解密函數

};

 

此處'A'對應0, 'Z'對應25,好比像得到'C'的對應的值能夠使用'C' - 'A', 即爲2


輸入描述

屬於一個整數k,表明乘法密碼的密鑰,k<26。

屬於一個整數n,表明接下來輸入字符的個數,接着輸入n個字符

輸出描述

輸出對應的密文


樣例輸入
3
8 YHQLMUQI
樣例輸出
ILOVEYOU

#include <iostream>
using namespace std;

char sec[1000];

class PassWord {
private:
    int k;
public:
    PassWord(int t);
    char convert(const char c);
};

PassWord::PassWord(int t)
{
    k = t;
}

char PassWord::convert(const char c)
{
    int i = c - 'A';
    for(int j = 0; ; ++ j)
    {
        int m = i + j * 26;
        if (m % k == 0 && m / k >= 0 && m / k < 26)
        {
            m /= k;
            return char(m + 'A');
        }
    }
}

int main()
{
    int k, n;
    cin >> k >> n;
    PassWord p(k);
    for (int i = 0; i < n; ++i)
    {
        char c;
        cin >> c;
        sec[i] = p.convert(c);
    }
    for (int i = 0; i < n; ++i)
        cout << sec[i];
    cout << endl;
    system("pause");
    return 0;
}
相關文章
相關標籤/搜索