求把1,2,3,...,20这20个自然数排成一圈,使任意两个自然数之和为素数
来源:互联网 发布:java时间戳转换为date 编辑:程序博客网 时间:2024/05/14 05:00
本文从百度知道上获取
#include <stdio.h>#include <stdbool.h>int main(){bool prime[40] = { /*设一个查找表,可以快速地判断某数是否为素数*/0, 0, 1, 1, 0, 1, 0, 1, 0, 0,0, 1, 0, 1, 0, 0, 0, 1, 0, 1,0, 0, 0, 1, 0, 0, 0, 0, 0, 1,0, 1, 0, 0, 0, 0, 0, 1, 0, 0};bool used[21] = { /*快速判断哪些数已经被选中*/0, 1, 0, 0, 0, 0, 0, 0, 0, 0, //a[0]无用,a[1]到a[20]分别存放选出的数 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 //因为考虑到题目要求的循环性}; //所有的解都可以位移使得1出现在a[1]位置,所以我们就直接规定1放在a[1]int a[21] = {0, 1};int cnt = 1; /*当发生无数可选的情况时,需要回退一步,此变量用来表示是否发生了回退*/bool tag = false;int i;while (cnt < 20){
/*如果发生了回退,则直接从上次选的数的后面开始查找,不是回退的话,则从2开始查找*/for (i = (tag ? a[cnt + 1] + 1 : 2); i < 21; i++){if ((! used[i]) && (prime[i + a[cnt]])){a[++cnt] = i; /*找到符合条件的数*/used[i] = true;tag = false;break;}}if ((20 == cnt) && (prime[a[1] + a[20]])){for (i = 1; i < 21; i++){printf("%d ", a[i]);}printf("\n");}else if ((20 == cnt) ||(21 == i)) /*如果发生了无数可选的情况,则回退一步*/{ used[a[cnt--]] = false;tag = true;}}return 0;}
0 0
- 求把1,2,3,...,20这20个自然数排成一圈,使任意两个自然数之和为素数
- 将1,2,3,。。。,20这20个连续的自然数排成一圈,使任意两个相邻的自然数之和均为素数。
- 将1-20这二十个连续的自然数排成一圈,使任意两个相邻的自然数之和均为素数
- 从1到20个数字排成一圈,每两个相邻数字之和为一个素数
- 求自然数1~10之和
- 巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数
- 巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。
- 一个无序自然数序列有N个自然数,快速找到二者之和为M的两个整数并输出
- 将1、2、...、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和也为一个素数。
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
- 自然数之和
- 键入一个自然数 ,求这个自然数的所有约数之和
- 任意自然数分解为连续自然数和问题
- 三个自然数的积为1986,和为338,求这三个自然数
- 整数拆分为连续自然数之和
- 整数拆分为连续自然数之和
- 正整数分解为几个连续自然数之和
- Java并发编程:深入剖析ThreadLocal
- 制作自己的数据集 打标签bounding box 之 Windows 10 下python环境安装(PyQt4)
- ATP的CTSC2017现形记
- java基础提高篇--抽象类和接口
- poj 2528 Mayor's posters(树状数组+离散化)
- 求把1,2,3,...,20这20个自然数排成一圈,使任意两个自然数之和为素数
- 算法分析与设计第十二周:473. Matchsticks to Square
- 序列化 Serializable和Parcelable用法及区别
- node.js通过权限验证连接MongoDB
- CVTE 2017春季校招技术类面试问题
- 形参,实参
- Mybatis入门学习一:HelloWorld
- 函数指针和指针函数
- HDU1542 Atlantis 扫描线 矩形面积并