您的位置:首页 > Web前端

剑指offer————字符串组合扩展题目立方体放数问题

2014-10-16 10:52 423 查看
输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点,是的正方体上三组相对的面上的4个顶点的和都相等。

#include<iostream>
using namespace std;
bool isMatch(int A[]){
if(A==NULL){
return false;
}
int r1 = A[0] + A[1] + A[2] + A[3];
int r2 = A[4] + A[5] + A[6] + A[7];
int r3 = A[0] + A[2] + A[4] + A[6];
int r4 = A[1] + A[3] + A[5] + A[7];
int r5 = A[0] + A[1] + A[4] + A[5];
int r6 = A[2] + A[3] + A[6] + A[7];

if(r1 == r2 ){
if( r3 == r4){
if( r5 == r6){
return true;
}
}
}

return false;
}
void count_case(int A[],int length,int index,bool &is){
if(A==NULL || length<=0 || index<0){
return;
}

if(index == length){
return;
}

if(isMatch(A)){
is = true;
return;

}else {
for(int p = index; p <= length ; ++p){

swap(A[index],A[p]);

count_case(A,length,index+1,is);

swap(A[index],A[p]);

}
}
}

bool cub_case(){
const int index = 8;
int A[index]={1,2,3,4,5,6,7,8};
bool is = false;
count_case(A,index-1,0,is);
return is;
}
int main(){
bool i = cub_case();
cout<<i<<endl;
system("pause");
return 0;
}


就是将这个数组进行全排列之后,验证各个面上的数字的和是否相等即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: