zoukankan      html  css  js  c++  java
  • 【剑指offer】对面和相等的正方体

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26509459


        剑指offer上的全排列相关题目。

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

        思路:相当于求出8个数字的全排列。推断有没有一个排列符合题目给定的条件,即三组对面上顶点的和相等。

        代码:

    #include<stdio.h>
    
    void swap(int *a,int *b)
    {
    	int temp = *a;
    	*a = *b;
    	*b = temp;
    }
    
    /*
    推断是否有符合条件的排列,假设有的话。打印出一组
    */
    bool CubVertex(int *A,int len,int begin)
    {
    	if(A==NULL || len!=8)
    		return false;
    
    	bool result = false;
    	if(begin == len-1)
    	{
    		if(A[0]+A[1]+A[2]+A[3]==A[4]+A[5]+A[6]+A[7] &&
    		A[0]+A[2]+A[4]+A[6]==A[1]+A[5]+A[3]+A[7] &&
    		A[0]+A[1]+A[4]+A[5]==A[2]+A[3]+A[6]+A[7])
    		{
    			int i;
    			for(i=0;i<len;i++)
    				printf("%d ",A[i]);
    			printf("
    ");
    			result =  true;
    		}
    	}
    	else
    	{
    		int i;
    		for(i=begin;i<len;i++)
    		{
    			swap(&A[begin],&A[i]);
    			result = CubVertex(A,len,begin+1);
    			if(result)
    				break;
    			swap(&A[begin],&A[i]);
    		}
    	}
    	return result;
    }
    
    int main()
    {
    	int A[8] = {1,2,3,1,2,3,2,2};
    	int B[8] = {1,2,3,1,8,3,2,2};
    	if(CubVertex(A,8,0))
    		printf("Yes
    ");
    	else
    		printf("No
    ");
    	if(CubVertex(B,8,0))
    		printf("Yes
    ");
    	else
    		printf("No
    ");
    	return 0;
    }

        測试结果:



  • 相关阅读:
    感谢梦想
    感谢迷茫
    CSS动画
    ES6笔记③
    Object的增。删。查。改。遍历
    js创建对象的方式 三种
    js 控制台的错误提示
    ES6笔记② 箭头函数
    ES6笔记① var 和 let的区别
    js冒泡排序
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7119498.html
Copyright © 2011-2022 走看看