的数组,js 判断数组有没有可能把这8个数字分别放到正方体的

LeetCode(8)
1.输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上,使得正方体三组相对的面上的4个顶点的和都相等
其实这道题跟字符串的排列是一样的,相当于先得到a1,a2,a3,a4,a5,a6,a7,a8这8个数字的所有排列,然后判断有没有某一个排列符合题目给定的条件,即
a1 + a2 + a3 + a4 == a5 + a6 + a7 + a8
a1 + a3 + a5 + a7 == a2 + a4 + a6 + a8
a1 + a2 + a5 + a6 == a3 + a4 + a7 + a8
package swordoffer.chapter4;
import java.util.ArrayL
import java.util.A
public class Interview28About1 {
public static void main(String[] args){
Interview28About1 i = new Interview28About1();
ArrayList&String& list = new ArrayList&&();
int[] num = {1,2,3,4,5,6,7,8};
i.isEightPoint(num,list);
public void isEightPoint(int[] num,ArrayList&String& list){
if (num == null)
Permutation(num,0,list);
private void Permutation(int[] num,int begin,ArrayList&String& list){
int end = num.length - 1;
if (begin == end) {
int a1 = num[0],a2 = num[1],a3=num[2],a4=num[3],a5 = num[4],a6 = num[5],a7 = num[6],a8 = num[7];
if (list.contains(Arrays.toString(num))) {
if ((a1 + a2 + a3 + a4 == a5 + a6 + a7 + a8) && (a1 + a3 + a5 + a7 == a2 + a4 + a6 + a8) && (a1 + a2 + a5 + a6 == a3 + a4 + a7 + a8))
list.add(Arrays.toString(num));
for(int i =i&=i++){
int temp = num[begin];
num[begin] = num[i];
Permutation(num,begin+1,list);
temp = num[begin];
num[begin] = num[i];
2.在8*8的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后不得处在同一行、同一列或者同一对角线上。请问一共有多少种符合条件的摆法?
思路分析:由于8个皇后任意两个不能处在同一行,那么肯定每个皇后占据一行。于是我们可以定义一个数组ColumnIndex[8],数组的第i个数字表示位于第i行皇后的列号。先把数组的8个数字用0~7初始化,接下来是对数组ColumnIndex的全排列。因为我们是用不同的数字初始化数组,所以任意两个皇后肯定不同列。我们只需要判断每一排列对应的8个皇后是不是在同一对角线上,也就是对于数组的两个下标i和j,是不是i-j = ColumIndex[i] - ColumnIndex[j]或者j - i =ColumIndex[i] - ColumnIndex[j]
package swordoffer.chapter4;
import java.util.ArrayL
import java.util.A
public class Interview28About2 {
public static void main(String[] args){
Interview28About2 i = new Interview28About2();
ArrayList&String& list = new ArrayList&&();
int[] queen = {0,1,2,3,4,5,6,7};
i.EightQueen(queen,list);
System.out.println(list.size());
public void EightQueen(int[] queen,ArrayList&String& list){
Permutation(queen,0,list);
private void Permutation(int[] queen,int begin,ArrayList&String& list){
if (begin == queen.length - 1){
for (int i=0;i & queen.i++){
for (int j =i + 1;j & queen.j++){
if ((i - j == queen[i] - queen[j]) ||(j - i == queen[i] - queen[j]))
list.add(Arrays.toString(queen));
for (int i =i & queen.i++){
int temp = queen[begin];
queen[begin] = queen[i];
queen[i] =
Permutation(queen,begin+1,list);
temp = queen[begin];
queen[begin] = queen[i];
queen[i] =笔试面试(62)
/***************************************************************
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入
字符串abc,则打印出由a、b、c所能排列出来的所有字符串abc、acb、
bac、cab和cba。
***************************************************************/
#include&stdio.h&
void stringPermutation(char* pStr, char* pBegin);
void stringPermutation(char* pStr)
if(pStr == NULL)
stringPermutation(pStr,pStr);
void stringPermutation(char* pStr, char* pBegin)
if(*pBegin == '\0') //递归到字符串末尾
printf("%s\n",pStr);
for(char* pCh=pB *pCh != '\0'; ++pCh)
char temp = *pCh; //交换子字符串第一个字符
*pCh = *pB
stringPermutation(pStr,pBegin+1);
temp = *pCh; //将子字符串第一个字符交换回来
*pCh = *pB
void test()
char pStr[] = "abc"; //注意这里不能写成char* pStr = "abc";
stringPermutation(pStr);
int main()
相关题目:
1.输入一些字符,求这些字符的所有组合。比如输入a,b,c,则它们的组合有
a,b,c,ab,ac,bc,abc。
解题思路:
如果输入n个字符,则这n个字符能构成长度为1的组合、长度为2的组合.....
长度为n的组合。在求n个字符的长度为m(1&=m&=n)的组合的时候,我们把这n
个字符分成两部分:第一个字符和其余的所有字符。如果组合包含第一个字符,
则下一步在剩余的字符里选取m-1个字符;如果组合里不包含第一个字符,则下
一步在剩余的n-1个字符里选取m个字符。也就是说,我们可以把求n个字符组成
长度为m的组合问题分解成了两个子问题,分别求n-1个字符串中长度为m-1的组合,
以及求n-1个字符的长度为m的组合。这两个子问题都可以用递归的方式解决。
2.输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体
的8个定点上,使得正方体上三组相对的面上的4个顶点的和都相等。
解题思路:
这相当于先得到a1,a2,a3,a4,a5,a6,a7,a8这八个数字的所有排列,然后判断
有没有某一个排列符合题目给定的条件,即s2+a2+a3+a4=a5+a6+a7+a8,
a1+a3+a5+a7=a2+a4+a6+a8,并且a1+a2+a5+a6=a3+a4+a7+a8.
3.在8*8的国际象棋上摆放8个皇后,使其不能相互攻击,即任意两个皇后不得
处在同一行、同一列或者同一对角线上。请问总共有多少种符合条件的摆法。
解题思路:
由于8个皇后的任意两个不能处在同一行,那么肯定是每一个皇后占据一行。
于是我们可以定义一个数组ColumnIndex[8],数组中第i个数字表示位于第i行
的皇后的列号。先把数组ColumnIndex的8个数字分别用0~7初始化,接下来就是
对数组ColumnIndex做全排列。因为我们是用不同的数字初始化数组,所以任意
两个皇后肯定不同列。我们只需要判断每一个排列对应的8个皇后是不是在同一
对角线上,也就是对于数组的两个下标i和j,是不是i-j=ColumnIndex[i]-ColumIndex[j]
或者j-i=ColumnIndex[i]-ColumnIndex[j]。相关题目1的答案void AllSubstring3(const char *str,char *arr)
//传入的arr的长度为len+1,最后一个位置保存'\0'
unsigned int len = strlen(str);
strcpy(arr,str);
for(i=len-1;i&=0;i--)
arr[i+1] = '\0';
for(j=i;j&=0;j--)
printf("%s\t",&arr[j]);
printf("\n");
如果面试题是按照一定要求摆放若干个数字,我们可以先求出这些数字
的所有排列,然后再一一判断每个排列是不是满足题目给定的要求。
==参考剑指offer 和
文章:13篇
阅读:14768
文章:16篇
阅读:31194
文章:10篇
阅读:14351的数组,判断有没有可能把这8个数字分别放到正方体的_百度知道
的数组,判断有没有可能把这8个数字分别放到正方体的
我有更好的答案
Scanner input = new Scanner(System.in);
System.out.print(&输入您要找的数:&);
int number = input.nextInt();
int numbers = 0;
int [] array = {2,4,5,5,8,9};
for(int i = 0 ; i & array. i++){
if(number == array[i]){
numbers = i+1;
System.out.println(&输入的数字在数组的&+numbers+&位置&);
if(numbers == 0 ){
System.out.println(&输入的数字不存在&);
采纳率:93%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 php 判断数组连续数字 的文章

 

随机推荐