算法与数据结构课设用c++求解求素数问题 、方程求解问题 、最短字符串问题 、扫雷问题

本文详细介绍了使用C++编程解决求素数问题(埃拉托色尼筛法)、方程求解、最短字符串排序及扫雷游戏算法。通过数据结构和算法设计,实现不同问题的解决方案,并附带源代码和调试分析。
摘要由CSDN通过智能技术生成

目录

摘  要

1.求素数问题

1.1 数据结构

1.2 算法设计

1.6源程序(带注释)

2.方程求解问题

2.1 数据结构

2.2 算法设计

2.3 函数调用关系

3.最短字符串问题

3.1 数据结构

3.2 算法设计

4. 扫雷问题

4.1 数据结构

4.2算法设计

总结


摘  要

利用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 函数调用关系图

4a2586c5034f4edd9ee3130ed1517fa4.png

 1.4 调试分析

f6b4adb1ebee433798d128e51bf8fac2.png

1.5 测试结果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值