本文主要是介绍《剑指Offer》面试题:三组对面和分别相等的正方体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《剑指Offer》第4章后面的相关题目
题目1
输入一个含有8个数字的数组,判断有么有可能把这8个数字分别放到正方体的8个顶点上,使得正方体上三组相对的面上的4个顶点的和相等。
思路
相当于求出8个数字的全排列,判断有没有一个排列符合题目给定的条件,即三组对面上顶点的和相等。而关于寻找全排列与我的这篇博文一样:http://blog.csdn.net/u010412719/article/details/48980787
具体实现代码如下
#include<stdio.h>
#include<stdlib.h>#define N 8void 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[N];for(int i=0;i<N;i++){scanf("%d",&arr[i]);}if(equalOfOppositeSumInCubVertix(arr,N,0)){printf("YES"); }else{printf("NO");}
}
运行结果如下
上图中第一行为输入,第二行为符合条件的结果的组合。
这篇关于《剑指Offer》面试题:三组对面和分别相等的正方体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!