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