2013年复试程序设计题

2013年

1. 编写程序,计算 1~20000 之间的质数,输出时要求每行 10 个数。

穷举的代码就不贴出了,下面给出一个时间复杂度O(n)的方法:
质数是从2开始讨论的,不妨先假设所有数都是质数,而任何一个数(包括质数)的 n(n>1) 倍一定不是质数,所以每访问一个数,就把它所有的n倍置为非质数。我们用一个vector< bool > numbers来保存所有数的情况,质数为true,非质数为false。

下面贴代码:

#include <iostream>
#include <vector>
using namespace std;

#define MAX_SIZE 20000

void getPrime(vector<bool> &numbers,vector<int> &primes){
    for (int i = 2; i <= MAX_SIZE; i++) {     //质数是从2开始讨论的
        if (numbers[i] == true)      //如果是质数,放入primes向量
            primes.push_back(i);

        for (int j = i; j <= MAX_SIZE; j += i)      //任何一个数的n倍一定不是质数,全部置为false
            numbers[j] = false;
    }
}

int main(){

    vector<bool> numbers(MAX_SIZE,true);       //初始化,默认都是质数true
    vector<int> primes;

    getPrime(numbers, primes);

    int count = 0;
    for (vector<int>::iterator it = primes.begin();it != primes.end() ;it++){
        cout << *it << " ";
        count++;
        if (count == 10){
            cout << endl;
            count = 0;
        }
    }

    cout << endl;
    return 0;
}

运行结果就不贴出了。

2. 编写简单的加密,解密程序。

在 main()函数中接收需要加密的字符串,进行加密。加密
时,将字符指针+1,Encrpy 的参数为字符指针。解密时将字符指针-1,Decrpy 的参数亦为字符指针。

并没有理解他想干嘛,指针加一减一又不会改变字符串的内容。。。
贴了代码:

#include <iostream>
using 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值