第二讲 算法的穷举设计与方法

穷举法

该方法由两部分组成:

  • 一是系统化地枚举问题各种可能的候选解;
  • 二是检查验证每一个候选解是否满足问题的求解要求。

实现穷举法的4个步骤:

  • 首选(first)。c=first (I):产生问题实例I的第一个候选解c(candidate solution);
  • 验证(valid)。valid (l, c):检查验证(validate)候选解c是否为问题实例I的解;
  • 输出(output)。output (1, e):如果c为I的解则将其输出;
  • 再选(next)。next (1, c):从当前候选解c顺次产生下一个候选解。

作业

(1) 素性测试算法
#include<stdio.h>
#include<windows.h>
#include<math.h>

#define N 5//测试数据个数

//判断素数
void Primality(int num) {
	int i = 2;//i起始从2开始
	boolean flag = true;//初始认定num为素数
	while (i <= sqrt(num)) {//i小于num开方
		if (num % i == 0) {//若num对i取余为0,则num不为素数
			flag = false;
			break;//跳出循环
		}
		i++;
	}

	if (flag)
		printf("%d 是素数\n", num);
	else 
		printf("%d 不是素数!\n", num);
	printf("\n"); printf("\n");
}
//测试
void TestPrimality(int* arr,int len) {
	for (int i = 0; i < len; i++) {
		Primality(arr[i]);
	}
	printf("\n");
}
int main() {
	//测试数据
	int arr[N] = { 200, 1013, 2000, 10303, 100000 };
	TestPrimality(arr, N);
}

在这里插入图片描述

(2) 伪随机函数
(a)设置种子为1,输出5~10个数;
#include<stdio.h>
#include<windows.h>
#include <time.h>
#include<math.h>

void RandTest_01(int len) {
	srand(1);   // 设置种子的值为1,如果不设置,默认种子为1
	for (int i = 0; i < len; ++i) {
		printf("%d\n",rand());	// 输出10个伪随机数
	}
}
int main() {
	int len = 10;
	RandTest_01(len);
}
(b)设置一个不是1的种子,输出5~10个数;
#include<stdio.h>
#include<windows.h>
#include <time.h>
#include<math.h>
void RandTest_02(int len) {
	srand(100);   // 设置种子的值为2
	for (int i = 0; i < len; ++i) {
		printf("%d\n", rand());	// 输出10个伪随机数
	}
}
int main() {
	int len = 10;
	RandTest_02(len);
}
(c)设置随时间变化的种子,输出5~10个数。
#include<stdio.h>
#include<windows.h>
#include <time.h>
#include<math.h>
void RandTest_03(int len) {
	time_t t = time(nullptr);
	srand(t);   // 设置种子的值为时间

	for (int i = 0; i < len; ++i) {
		printf("%d\n", rand());	// 输出10个伪随机数
	}
}
int main() {
	int len = 10;
	RandTest_03(len);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值