蓝桥杯 试题 算法提高 开灯游戏 java 实现

试题 算法提高 开灯游戏

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  有9盏灯与9个开关,编号都是1~9。

每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的)。

具体如下:

第一个开关控制第二,第四盏灯;

第二个开关控制第一,第三,第五盏灯;

第三个开关控制第二,第六盏灯;

第四个开关控制第一,第五,第七盏灯;

第五个开关控制第二,第四,第六,第八盏灯;

第六个开关控制第三,第五,第九盏灯;

第七个开关控制第四,第八盏灯;

第八个开关控制第五,第七,第九盏灯;

第九个开关控制第六,第八盏灯。

开始时所有灯都是熄灭的,开关是关闭着的。要求按下若干开关后,使得只有4盏灯亮着。
输出格式
  输出所有可能的方案,每行一个方案,每一行有9个字符,从左往右第i个字符表示第i个开关的状态("0"表示关闭,"1"表示打开),
按字典序输出。下面的样例输出只是部分方案。
样例输出

import java.util.*;
public class _开灯游戏 {
  static  ArrayList<Integer>[] aLists= new ArrayList[9];
	public static void main(String[] args) {
		setArrylist(aLists);
		gcd("");

	}
	
	
	
 private static void gcd(String str) {
		if(str.length()==9) {
			getString(str);
//			System.out.println(str);
			return;
		}
		gcd(str+"0");
		gcd(str+"1");
		
	}



private static void getString(String str) {
	   int num[] = new int[9];
	   for (int i = 0; i < num.length; i++) {
		   if(str.charAt(i)=='0')continue;
		   ArrayList<Integer> array = aLists[i];
		   for (int j= 0; j <array.size(); j++) {
			 if(num[array.get(j)-1]==1)num[array.get(j)-1]=0;
			 else num[array.get(j)-1]=1;
		  }
	  }
	  sheck(num, str);
	   
		
	}
 
 
private static void sheck(int[] num,String str) {
	     int k=0;
         for (int i = 0; i < num.length; i++) {
			if(num[i]==1)k++;
		  }
         if(k==4)System.out.println(str);
         return;
	
}
  public static void setArrylist(ArrayList[] alists) {
	    ArrayList<Integer> list1 = new ArrayList<Integer>();
		list1.add(2);list1.add(4);
		alists[0]=list1;
		
		ArrayList<Integer> list2 = new ArrayList<Integer>();
		list2.add(1);list2.add(3);list2.add(5);
		alists[1]=list2;
		
		ArrayList<Integer> list3 = new ArrayList<Integer>();
		list3.add(2);list3.add(6);
		alists[2]=list3;
		
		ArrayList<Integer> list4 = new ArrayList<Integer>();
		list4.add(1);list4.add(5);list4.add(7);
		alists[3]=list4;
		
		ArrayList<Integer> list5 = new ArrayList<Integer>();
		list5.add(2);list5.add(4);list5.add(6);list5.add(8);
		alists[4]=list5;
		
		ArrayList<Integer> list6 = new ArrayList<Integer>();
		list6.add(3);list6.add(5);list6.add(9);
		alists[5]=list6;
		
		ArrayList<Integer> list7 = new ArrayList<Integer>();
		list7.add(4);list7.add(8);
		alists[6]=list7;
		
		ArrayList<Integer> list8 = new ArrayList<Integer>();
		list8.add(5);list8.add(7);list8.add(9);
		alists[7]=list8;
		
		
		ArrayList<Integer> list9 = new ArrayList<Integer>();
		list9.add(6);list9.add(8);
		alists[8]=list9;
   }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值