黑马程序员技术交流社区
标题:
两个面试题目
[打印本页]
作者:
黄林
时间:
2012-12-28 12:36
标题:
两个面试题目
1,一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?请用递归算法编程实现。[中国某著名通信企业H面试题]
2,2:八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是19世纪著名的数学家高斯1850年提出:在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。[英国某著名计算机图形图像公司面试题]
有多少人看过,写过
作者:
管冉
时间:
2012-12-28 13:18
第一题,想半天,也没啥思路
百度了个详细的
#include <stdio.h>
#include <stdlib.h>
#define GOAL 90 //目标环数
#define MAX_SRE 10 //每次射击的最大环数
#define MAX_CNT 10 //总共射击次数
int score[MAX_CNT]; //有效环数
int num = 0; //可能的射击组合数
//筛选有效环数,返回可能的组合数,否则返回-1
int ValidScore(int sre, int cnt, int balance)
{
balance -= sre; //这次射击以后还需要射击的总环数
if(balance<0 || balance>((MAX_CNT-cnt)*MAX_SRE)) //退出递归的条件
{
cnt--; //当最后一环不符合要求时,能不影响后面的打印判断
return -1; //不符合条件,结束递归
}
else
{
score[cnt-1] = sre; //存储有效环数
while(cnt < 9) //控制射击次数
{
cnt++;
score[cnt-1] = -1; //设置一个循环推出条件
for(sre=MAX_SRE; sre>=0; sre--) //从高分往下寻找合适的分数
{
if(-1 == ValidScore(sre, cnt, balance)) //若此分不能满足要求,那么低于它的分更不能满足要求了
break;
}
if(-1 == score[cnt-1]) //若通过上面的for循环,在第cnt次里没有满足要求的环数了,那第cnt次以后的次数就根本不用再继续寻找了
break;
}
if(9 == cnt && balance <= MAX_SRE) //最后一次设计可以不用循环来控制,而是直接等于除了前九次以外还需要的环数
{
score[cnt] = balance; //最后一次需要射击的环数
//打印每一种可能的结果(如果要测目标环数为90的话,建议把这小段注释了,因为总共有92386种可能性)
printf("有效得分:");
for(cnt=0; cnt<MAX_CNT; cnt++)
printf(" %d", score[cnt]);
printf("\n");
num++; //找到一种可能性,总数加一
}
}
return num;
}
int main()
{
int cnt = 1; //射击次数
for(score[0]=MAX_SRE; score[0]>=0; (score[0])--)
ValidScore(score[0], cnt, GOAL); //递归筛选有效环数
printf("总共有 %d 种可能。\n", num);
return 0;
}
复制代码
作者:
许晓华
时间:
2012-12-28 15:38
//其实第一个问题属于背包问题。答案是92378
using System;
class Program
{
static int count = 0;
static void Main(string[] args)
{
shoot(10, 90);//开10枪打90环
Console.WriteLine(count);
}
static void shoot(int num, int score)
{
if (score < 0 || score > num * 10)
return;
else if (num == 0)
count++;
else
for (int i = 0; i <= 10; i++)
{
shoot(num - 1, score - i);
}
}
}
复制代码
作者:
罗代势
时间:
2012-12-28 20:14
觉得讲递归算法不错
http://www.cnblogs.com/serviceboy/archive/2009/07/19/1526590.html
作者:
曾光
时间:
2013-1-10 19:54
算法写得很好!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2