A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
这道题我只实现如何找出来所有满足的答案,不求出最小的字典排序。
思路:那就是依次放入,例如第一个空放入2,那么在1+2+1的位置上也要放一个2.
那么在第2个位置放上3 那么在2+3+1的位置上也要放下三
应该是一个递归,上代码。
Set<Integer> set=new LinkedHashSet<Integer>();
int array[];
int book[];
public static void main(String[] args){
Test test=new Test();
test.start();
}
public void start(){
array=new int[8];
book=new int[]{1,1,2,2,3,3,4,4};
recursion(0,0);
}
public void recursion(int b,int index){
if(b==8){
System.out.println(Arrays.toString(array));
return;
}
if(array[b]!=0){
recursion(b+1,index);
return;
}
for(int i=0;i<array.length;i++){
if(book[i]!=0){
//如果set集合里面含有了此书的价值,就不执行
if(!set.contains(book[i])){
set.add(book[i]);
//在b位置放上book[i]的价值
array[b]=book[i];
if(b+book[i]+1>=book.length||array[b+book[i]+1]!=0){
array[b]=0;
set.remove(book[i]);
continue;
}
//在另外一处放下book[i]的价值
array[b+book[i]+1]=book[i];
//book[i]=0证明这个价值已经放了进去
book[i]=0;
recursion(b+1,index+1);
book[i]=array[b];
array[b]=0;
array[b+book[i]+1]=0;
set.remove(book[i]);
}
}
}
}
public boolean judge(int array[]){
int a=0;
for(int i=0;i<array.length;i++){
if(array[i]==0){
a++;
}
}
if(a>1){
return false;
}else{
return true;
}
}
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
这道题也是一样:
Set<Integer> set=new LinkedHashSet<Integer>();
int array[];
int book[];
public static void main(String[] args){
Test test=new Test();
test.start();
}
public void start(){
array=new int[14];
book=new int[]{1,1,2,2,3,3,4,4,5,5,6,6,7,7};
recursion(0);
}
public void recursion(int b){
if(b==book.length){
if(array[0]==7&&array[1]==4){
System.out.println(Arrays.toString(array));
}
return;
}
if(array[b]!=0){
recursion(b+1);
return;
}
for(int i=0;i<array.length;i++){
if(book[i]!=0){
if(!set.contains(book[i])){
set.add(book[i]);
array[b]=book[i];
if(b+book[i]+1>=book.length||array[b+book[i]+1]!=0){
array[b]=0;
set.remove(book[i]);
continue;
}
array[b+book[i]+1]=book[i];
book[i]=0;
recursion(b+1);
book[i]=array[b];
array[b]=0;
array[b+book[i]+1]=0;
set.remove(book[i]);
}
}
}
}
public boolean judge(int array[]){
int a=0;
for(int i=0;i<array.length;i++){
if(array[i]==0){
a++;
}
}
if(a>1){
return false;
}else{
return true;
}
}