本人刚学Java,有道题不知道怎么做,求高手。。。。求答案,回答后再给10分;
问题是某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:1)A和B两人中至少去一人;2)A和D不能一起去;3)A、E和...
问题是
某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:
1)A和B两人中至少去一人;
2)A和D不能一起去;
3)A、E和F三人中要派两人去;
4)B和C都去或都不去;
5)C和D两人中去一个;
6)若D不去,则E也不去。
问应当让哪几个人去?
答案是A,B,C,F,
类似这种这题要怎样写成Java的代码 展开
某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:
1)A和B两人中至少去一人;
2)A和D不能一起去;
3)A、E和F三人中要派两人去;
4)B和C都去或都不去;
5)C和D两人中去一个;
6)若D不去,则E也不去。
问应当让哪几个人去?
答案是A,B,C,F,
类似这种这题要怎样写成Java的代码 展开
4个回答
展开全部
答案只有 ABCF 一个 用递归穷举所有可能就行了,我大概写了一下,没有优化看下你能看明白不。还可以优化 从判断到循环数目都可以用更少的判断得到结果。
import java.util.ArrayList;
public class Dfdfewf {
public static void main(String[] args) {
String[] s={"A","B","C","D","E","F"};
ArrayList<String> list = new ArrayList<String>();
for(int i=0;i<s.length;i++){
list.add(s[i]);
}
for(int i=0;i<s.length;i++){
te(i+1,list);
}
}
public static void te(int nn,ArrayList<String> list){
if(nn>0){
for(int i=0;i<list.size();i++){
ArrayList<String> li=(ArrayList<String>) list.clone();
li.remove(i);
if(nn==1){
if(li.contains("A")||li.contains("B")){
if(!(li.contains("A")&&li.contains("D"))){
if((li.contains("A")&&li.contains("E"))||(li.contains("A")&&li.contains("F"))||(li.contains("F")&&li.contains("E"))) {
if((li.contains("B")&&li.contains("C"))||(!li.contains("B")&&!li.contains("C"))){
if(li.contains("D")||li.contains("C")){
if(!li.contains("D")&&!li.contains("E")){
for(int m=0;m<li.size();m++){
System.out.print(li.get(m));
}
System.out.println("");
}
}
}
}
}
}
}
te(nn-1,li);
}
}else{
return;
}
}
}
结果输出
ABCF
ABCF
import java.util.ArrayList;
public class Dfdfewf {
public static void main(String[] args) {
String[] s={"A","B","C","D","E","F"};
ArrayList<String> list = new ArrayList<String>();
for(int i=0;i<s.length;i++){
list.add(s[i]);
}
for(int i=0;i<s.length;i++){
te(i+1,list);
}
}
public static void te(int nn,ArrayList<String> list){
if(nn>0){
for(int i=0;i<list.size();i++){
ArrayList<String> li=(ArrayList<String>) list.clone();
li.remove(i);
if(nn==1){
if(li.contains("A")||li.contains("B")){
if(!(li.contains("A")&&li.contains("D"))){
if((li.contains("A")&&li.contains("E"))||(li.contains("A")&&li.contains("F"))||(li.contains("F")&&li.contains("E"))) {
if((li.contains("B")&&li.contains("C"))||(!li.contains("B")&&!li.contains("C"))){
if(li.contains("D")||li.contains("C")){
if(!li.contains("D")&&!li.contains("E")){
for(int m=0;m<li.size();m++){
System.out.print(li.get(m));
}
System.out.println("");
}
}
}
}
}
}
}
te(nn-1,li);
}
}else{
return;
}
}
}
结果输出
ABCF
ABCF
展开全部
把楼上两位结合一下,本人很懒不太想写,给你写一小段
A、B、C、D、E、F六个队员你是新手就定义六个变量如下:
int a,b,c,d,e,f;//值为0表示不去,1为去
然后穷举用for循环,如000000都不去,000001就F去等等
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
......
{如上六个问题都要满足才能很出答案
第一小问,A和B两人中至少去一人就是不能都不去
if(!(a==0 && b==0)){
break;
}
如此往往下一个一个写
}
十再不懂再问吧
A、B、C、D、E、F六个队员你是新手就定义六个变量如下:
int a,b,c,d,e,f;//值为0表示不去,1为去
然后穷举用for循环,如000000都不去,000001就F去等等
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
......
{如上六个问题都要满足才能很出答案
第一小问,A和B两人中至少去一人就是不能都不去
if(!(a==0 && b==0)){
break;
}
如此往往下一个一个写
}
十再不懂再问吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最直观的办法,使用穷举法搜索
用一个bit数组N[6]表示A,B,C,D,E,F的选择情况
比如[0 0 0 0 0 0] 表示全未选中,[1 1 1 1 1 1]表示全部选中
对每种选择,验证是否满足1-6个条件
用一个bit数组N[6]表示A,B,C,D,E,F的选择情况
比如[0 0 0 0 0 0] 表示全未选中,[1 1 1 1 1 1]表示全部选中
对每种选择,验证是否满足1-6个条件
追问
问题是我对穷举法几乎不懂
追答
穷举法就是列举问题的每种可能性求解问题的一种策略
通常,穷举法是解决问题最直观的方法(当然,未必是最高效的)
比如你问的这个题,穷举法就是列出所有的人选安排,看看是否符合要求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据输入的字母用if else来做条件判断,符合用变量保存,最后得到最终结果再输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询