您的位置:首页 > 职场人生

《剑指Offer》面试题:三组对面和分别相等的正方体

2015-10-09 21:30 831 查看
《剑指Offer》第4章后面的相关题目

题目1

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

思路

相当于求出8个数字的全排列,判断有没有一个排列符合题目给定的条件,即三组对面上顶点的和相等。而关于寻找全排列与我的这篇博文一样:http://blog.csdn.net/u010412719/article/details/48980787

具体实现代码如下

#include<stdio.h>
#include<stdlib.h>

#define N  8

void swap(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
bool equalOfOppositeSumInCubVertix(int *arr,int len,int begin){
if(arr==NULL||len!=8){//判断输入的参数是否有效
return false;
}
bool result=false;
if(begin==len-1){
if((arr[0]+arr[1]+arr[2]+arr[3]==arr[4]+arr[5]+arr[6]+arr[7])&&
(arr[0]+arr[2]+arr[4]+arr[6]==arr[1]+arr[3]+arr[5]+arr[7])&&
(arr[0]+arr[1]+arr[4]+arr[5]==arr[2]+arr[3]+arr[6]+arr[7])){
for(int i=0;i<len;i++){
printf("%d ",arr[i]);
}
printf("\n");
result= true;
}
}
else{
for(int i=begin;i<len;i++){
swap(&arr[begin],&arr[i]);
result=equalOfOppositeSumInCubVertix(arr,len,begin+1);
if(result){ //这条语句的作用就是:当我们找到一条满足条件的组合后然后就全部退出。,如果没有这条语句,则会打印出所有符合条件的组合。
break;
}
swap(&arr[i],&arr[begin]);
}

}
return result;
}
int main(void){
int arr
;
for(int i=0;i<N;i++){
scanf("%d",&arr[i]);
}
if(equalOfOppositeSumInCubVertix(arr,N,0)){
printf("YES");
}
else{
printf("NO");
}
}


运行结果如下



上图中第一行为输入,第二行为符合条件的结果的组合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: