【NOJ1008】【算法实验二】素数环问题

本文介绍了一种解决素数环问题的方法,该问题要求从1到20的整数排列成一个环,使得任意相邻两数之和为素数,并寻找满足条件的最小字典序排列。通过递归搜索和素数判断算法实现了这一目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1008.素数环问题

时限:1000ms 内存限制:10000K 总时限:3000ms
描述
把1到20这重新排列,使得排列后的序列A满足:
a. 任意相邻两个数之和是素数
b. 不存在满足条件a的序列B使得:A和B的前k(0 <= k <= 19)项相同且B的第k+1项比A的第k+1项小。(即按字典序排列的第一项)

输入
没有输入。

输出
输出A,两个数字之间用一个空格隔开,第一个数字前面和最后一个数字后面没有空格。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define maxn 20

int a[maxn+1],sum=0;
int visited[maxn+1];

void init()
{
	for(int i=0;i<maxn+1;i++)
	{
		a[i]=i;
	}
}

void print()
{
	sum++;
	if(sum==2)
	{
		for(int i=1;i<=maxn;i++)
		{
			if(i<maxn)
				printf("%d ",a[i]);
			else
				printf("%d\n",a[i]);
		}
		exit(0);
	}
}
 
int isprime(int num)
{
	int i,k;
	k=sqrt(num);
	for(i=2;i<=k;i++)
		if(num%i==0)
		{
			return 0;
		}
	return 1;
}
 
void swap(int m,int n)
{
	int t;
	t=a[m];
	a[m]=a[n];
	a[n]=t;
}
 
void search(int m)
{
	int i;
	if(m==maxn+1)
	{
		if(isprime(a[1]+a[maxn]))
		{
			print();
		}
	}
	else
	{
		for(i=m;i<=maxn;i++)
		{
			swap(m,i);
			if(isprime(a[m-1]+a[m]))
				search(m+1);
			swap(m,i);
		} 
	}	
}
 
int main()
{
	init();
	search(2);
	return 0;
}
<think>好的,我需要帮助用户查找与计算机组成原理实验相关的NOJ(可能是西北工业大学在线评测系统)题目或资源。首先,我应该确认用户提到的NOJ具体指哪个平台。由于用户引用了西工大的相关信息,推测NOJ可能是指该校的在线评测系统,类似于其他高校的OJ平台。 接下来,我需要考虑如何找到相关的实验题目和资源。根据用户提供的引用[^1],用户是通过B站哈工大刘宏伟老师的课程学习计算机组成原理的,可能对实验部分的需求较高。通常,计算机组成原理的实验会涉及数字逻辑、CPU设计、存储器管理等内容。 首先,我应该检查是否有公开的西工大NOJ平台,或者该校是否提供实验题目的公开访问。不过,很多学校的OJ系统可能需要校内访问权限,所以可能需要其他途径。如果无法直接访问,可以建议用户通过学校内网或联系相关教师获取资源。 其次,可以推荐其他类似的资源,例如其他高校的公开实验题目、开源项目或在线平台上的相关实验。例如,GitHub上可能有学生或教师分享的实验代码和题目,或者像Educative、Coursera这样的平台可能有相关实验内容。 另外,用户可能需要实验指导书或实验手册。例如,唐朔飞老师的《计算机组成原理实验指导》或西工大自己编写的实验教材可能包含相关实验题目和步骤。用户可能需要查阅这些书籍或联系学校图书馆获取资源。 同时,考虑到用户提到通过B站学习,可以建议在B站搜索“计算机组成原理实验 NOJ”或类似关键词,可能会有相关的视频教程或资源分享。此外,知乎、CSDN等技术社区也可能有用户分享的经验和资源链接。 需要提醒用户注意,部分资源可能需要校内权限或特定权限才能访问,建议通过学校提供的渠道获取。此外,确保引用的资源正确无误,避免使用来源不明的材料。 最后,生成相关问题,帮助用户进一步探索可能的解决方案或深入理解计算机组成原理实验内容。</think>### 计算机组成原理实验资源与NOJ题目查找指南 #### 1. **校内资源获取** - **西工大教务系统/课程平台**:登录学校提供的课程管理系统(如Canvas、Moodle),在“计算机组成原理”课程模块中查找实验指导文档、NOJ题目列表或实验代码模板[^1]。 - **联系助教或教师**:通过课程群或邮件咨询实验配套的NOJ题目编号,例如存储器设计实验可能对应NOJ题目`CO_Exp2`。 #### 2. **公开实验题目参考** 若无法直接访问校内NOJ,可参考以下替代资源: - **经典实验内容**: - **运算器设计**:实现8位ALU(支持加减与逻辑运算),验证如$F = A + B$或$F = A \oplus B$的功能。 - **存储器扩展**:使用74LS181芯片扩展RAM容量,编写Verilog代码并仿真时序。 - **开源项目**: - GitHub搜索关键词`computer-organization-lab`或`cpu-design-lab`,例如[MIPS模拟器项目](https://github.com/search?q=computer+organization+lab)(代码实现参考)。 #### 3. **实验辅助资料** - **书籍**: - 《计算机组成与设计:硬件/软件接口》实验章节(含RISC-V实例)[^2] - 西工大自编实验指导书(需通过图书馆借阅) - **在线教程**: - B站搜索“计算机组成原理 实验 西工大”,部分UP主会分享实验报告与代码片段。 - 实验工具教程(如Logisim、Vivado)可参考[实验工具入门指南](https://www.bilibili.com/video/BV1G44y1z7Q2)。 #### 4. **NOJ题目示例(模拟推测)** 根据常见实验内容,NOJ题目可能包括: ```plaintext 题目编号:CO_Exp1 名称:基本逻辑门电路仿真 要求:使用Logisim构建AND/OR/NOT门组合电路,提交仿真结果截图与真值表。 题目编号:CO_Exp3 名称:单周期CPU设计 要求:基于MIPS指令集实现加法、跳转指令,并通过汇编测试用例。 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

血月无华AUV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值