输入一个含有8个数字的数组,判断有没有可能使得这个8个数字分别放到正方体的8个顶点上,使得正方体上三组相对应的面上的4个顶点的和都相等

#include<iostream>
using namespace std;
int flag=1;//标志位,标记这是第几个
void swap(int *p1,int *p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
//必须有这个,要排除掉那些重复的排列,去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换,
//也就是只有第i个数与第j个数交换时,要求[i,j)中没有与第j个数相等的数才交换
bool Isswap(int* num,int start,int end) // start==end或者是start到end没有等于num[end]的值得这两种情况都是可以进行交换的
{
for(int i=start;i<end;i++)
if(num[i]==num[end])
return false;
return true;
}
bool request(int *num)
{
bool front=false;
bool left=false;
bool above=false;
if(num[0]+num[1]+num[2]+num[3]==num[4]+num[5]+num[6]+num[7])//注意这里数组的序号是从0开始的
above=true;
if(num[0]+num[2]+num[4]+num[6]==num[1]+num[3]+num[5]+num[7])
left=true;
if(num[0]+num[1]+num[4]+num[5]==num[2]+num[3]+num[6]+num[7])
front=true;
return (left&&above&&front);
}

void allrange(int* num,int k,int m)//全排列的核心思想
{
if(k>m)
cout<<"wrong input"<<endl;
if(k==m)
{
if(request(num))
{
cout<<"第"<<flag<<"个满足要求排列: ";//注意flag标志位必须定义为一个全局变量,不能定义在allrange函数中,否则每次递归flag又从新定义为1了,每次都没有变化
flag++;
for(int i=0;i<=m;i++)//注意数组的输出只能够一次遍历其每一个值
cout<<num[i];
cout<<endl;
}
}
else
{
for(int i=k;i<=m;i++)
{
if(Isswap(num,k,i))
{
//swap(num+k,num+i);//注意不能够写为swap(num[k],num[i]),要么写成swap(num+k,num+i)
swap(&num[k],&num[i]);
allrange(num,k+1,m);
swap(num+k,num+i);
}
}
}
}
int main()
{
int num[]={1,2,3,4,5,6,7,8};
int length=sizeof(num)/sizeof(int);
allrange(num,0,length-1);
return 0;
}

C++实现在正方体8个顶点上放数字使得三组相对的面上的4个顶点的和都相等相关推荐

  1. 严重失眠?湿气重?肚子上放个它,整夜哗哗排湿,睡的香!打雷都叫不醒!...

    ©程序员严选 丨为您甄选全球好物 我妈妈今年63岁,失眠了整整10年,这10年里,没睡过一晚的安稳觉,身心几近崩溃. 像我妈这样的中老年人太多了: 入睡困难,睡眠极浅,闭上眼睛脑海里像放电影,都是些陈 ...

  2. Python关于1、计算一个三位数每位上的数字的三次方之和 2、计算一个四位数每位上的数字的四次方之和

  3. openGL入门(三)绘制带对角线的正六边形,并在各个顶点上标明字母

    在上篇文章的基础上,本篇文章介绍如何继续在多边形的各个顶点加上字母.openGL本身不带有绘制字母的函数,是通过glutBitmapCharacter(font , character)绘制位图的算法 ...

  4. 如何比较直观地证明正多面体只有5种?(可证:棱锥顶点上所有角之和必然小于360度)

    最近看卡尔萨根的<宇宙>,看到了毕达哥拉斯和开普勒对正多面体的狂热.书中说正多面体只有五种, 并在附录中利用欧拉公式进行了证明.我觉得这个证明非常不直观,首先,欧拉公式不直观, 其次,后面 ...

  5. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己 索引缓存的故事

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. 【Visual C++】游戏开发笔记三十七 浅墨DirectX提高班之五 顶点缓存的红颜知己:索引缓存的故事

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8304741 作者:毛星云(浅墨 ...

  7. python输入一个四位整数、判断该数是否是四叶玫瑰数_四叶玫瑰数是指四位数各位上的数字的四次方之和等于本身的数,请同学们用PYTHON编程实现查找(1000-10000)之间的四叶玫瑰数...

    [简答题]1.2.3.4.5.6.7.11 [简答题]素描线条 [单选题]下列有关局部变量的说法正确的是( ) [其它]上传面部刮痧的操作视频,以及小组的评分表 [单选题]有关全局变量说法不正确的是( ...

  8. 中国年度AI省市格局:北广上稳居前三,江苏四川力压浙江,山西转型“挖数据”增速迅猛...

    允中 发自 凹非寺 量子位 报道 | 公众号 QbitAI 中国数字经济发展哪省强? 从云计算的维度,前五分别是:上海.北京.广东.浙江和湖北. 按照AI维度,前五则是:北京.广东.上海.江苏和四川. ...

  9. 关于数据科学,书上不曾提及的三点经验

     关于数据科学,书上不曾提及的三点经验 发表于2015-09-10 23:33| 445次阅读| 来源Mikio L. Braun Blog| 0 条评论| 作者Mikio L. Braun 大数 ...

最新文章

  1. Mvn+Jetty启动项目
  2. LocalDateTime、LocalDate、Date的相互转换(亲测LocalDateTime转LocalDate)
  3. 均衡教派服务器维护,LOL十大最坑大区盘点 LOL最坑服务器 均衡教派坐实榜首
  4. java spr_Java中的42行代码中的URL缩短器服务(Java(?!)Spring Boot + Redis
  5. 什么是CDN ,CDN的作用
  6. 【知识图谱】一、知识表示与知识建模
  7. 伦巴时间步的动作要领_军训动作要领已到,请签收
  8. Android--调用系统照相机拍照与摄像
  9. 【Clickhouse】ClickHouse 内部架构介绍
  10. html语言的字体设置
  11. 基于IR2136的三相电机控制
  12. java 计算2的64次幂_2的64次方
  13. linux在文件夹压缩,在linux下如何将文件夹压缩成.tgz文件
  14. pdfbox pdf转图片中的字体问题
  15. 关于行人重识别方法PCB《Beyond Part Models: Person Retrieval with Refined Part Pooling 》及代码实现解读
  16. habor-deploy docker https 私有仓库搭建
  17. VS Code利用GIT对源码进行管理
  18. windows下解决Git报错: LF will be replaced by CRLF the next time Git touches it
  19. 回归基础 java基础数据 数据处理
  20. 接口测试 Pytest的简单示例

热门文章

  1. linux 挂载光盘映像,在 Windows Mac和Linux上,如何挂载iso和其他光盘映像
  2. oracle 查询无限开始,Oracle无限分级下查询指定分类下所有子分类Sql
  3. 苹果挂端口方法_一招教你,让光猫四个端口既能上网又能IPTV,不用再区分端口...
  4. java序列化库_java 中序列化(Serializable)
  5. python求交点坐标_Python求两个圆的交点坐标或三个圆的交点坐标方法
  6. kudu接受kafka消息_Kafka入门详解
  7. springweb 导入导出csv_诺基亚Nokia8110通讯录如何导入?这里有妙招
  8. 科学计算机程序 字表处理软件都是,计算机应用基础知识_计算机应用基础试题及答案【最新资料】.doc...
  9. MATLAB批量实现dicom转换为bmp格式
  10. 从MATLAB帮助文档上学习 chirp