目录
摘 要
利用C/C++的基础知识,用面向对象程序设计的基本思路和各种算法与数据结构解决求素数问题,方程求解问题,最短字符串问题和模拟扫雷问题。通过设计巧妙的算法在dos环境下解决了相应的问题,并进行算法的复杂度分析,以对算法进行比较和改良,从而加深对课本知识的理解和动手编程的能力。
关键词:C++,算法,数组,数据结构。
1.求素数问题
埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂ 的整数,编程实现此算法,并讨论运算时间。
1.1 数据结构
考虑到不需要进行频繁的删除和插入操作,所以可以采用顺序表或者数组来储存1—N的数字,本程序采用顺序表来存储操作过程中要用到的一些数据。
typedef struct Node
{int data;
int flag;
struct Node *Link;
}Node,*LinkList;
1.2 算法设计
埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。
(1)先把1删除(现今数学界1既不是素数也不是合数)。 正在上传…重新上传取消
(2)读取队列中当前最小的数2,然后把2的倍数删去。
(3)读取队列中当前最小的数3,然后把3的倍数删去。
(4)读取队列中当前最小的数5,然后把5的倍数删去。
(5)如上所述直到需求的范围内所有的数均删除或读取。
//建立一个整数2~N的线性表
//建立一个整数2~N的线性表
SeqList InList(SeqList L,int m)
{
SeqList X=L;
int i,j;
X.length=0;
if((m < 2)||(m > MaxSize))
{
printf("error!\n");
}
else
{
for(i=2,j=0;i<m;i++,j++)
{
X.data[j]=i;
X.length++;
}
return X;
}
}
//判断素数
SeqList JudgePrimeNumber(SeqList L,SeqList Q,int m)
{
int i,j,l=0,a=0,b=0;
double n;
for(i = 2;i < m;i++)
{
n = sqrt(L.data[l++]);
for(j = 2;j <= n;j++)
{
if(i % j == 0)
break;
}
if(j > n)
{
Q.data[a++]=i;
Q.length++;
}
}
return Q;
}
1.3 函数调用关系图
1.4 调试分析
1.5 测试结果