有六个数,分别是1,2,2,3,4,5,要求列出所有的六位数,3不能在第三位,4和5不能相连,要把所有的六位数列出来
4条回答 默认 最新
- tengxg 2009-10-25 10:44关注
最直接最笨的办法:定义一个int[6]表示六个位子,我们先放有条件限制的,4、5、3
4可能放在六位的一个,所以一个循环
5可能放在六位的一个,所以再嵌一个循环,但此时要加限制了,不能和4重复或前后
3可能放在六位的一个,要一个循环,加限制,不能和4、5同位且不能在第三位
1可能放在剩下的三位的一个,也要用一个循环
2放在剩下的两位,成功一个输出一个,
基于以上思想,我们定义的数组初始化都为0public class SixNumber {
public static void main(String[] agrs){ int array[] = new int[]{0,0,0,0,0,0};//初始化六个位子 int count=0; //统计总的符合情况数 for(int i=0;i<6;i++){ //第一个循环存放4 array[i]=4; for(int j=0;j<6;j++){ //第二个循环存放5 if(j!=i&&j!=i-1&&j!=i+1){ //加限制 array[j]=5; for(int k=0;k<6;k++){ //第三个循环存放3 if(k!=i&&k!=j&&k!=2){ //加限制 array[k]=3; for(int m=0;m<6;m++){ //第四个循环存放1 if(m!=i&&m!=j&&m!=k){ //加限制 array[m]=1; for(int t=0;t<6;t++){ //剩下的循环就是打印出来符合的情况了 if(array[t]==0){ //为0的当然是剩下的两个位子了,我们不要设置了,直接打印出2就行了 System.out.print(2); }else{ System.out.print(array[t]); //此位不为0就打印出对应存放好的值就行了 } if(t==5){ count++;//符合情况的 if(count%5==0) System.out.println(); //一种符合情况后换行 else System.out.print("---------"); } } array[m]=0; //这里要恢复上一层,以便下一个再试 } } array[k]=0;//这里要恢复上一层,以便下一个再试 } } array[j]=0;//这里要恢复上一层,以便下一个再试 } } array[i]=0;//这里要恢复上一层,以便下一个再试 } System.out.println("\n共"+count+"中符合情况的"); }
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 【提问】基于Invest的水源涵养
- ¥20 微信网友居然可以通过vx号找到我绑的手机号
- ¥15 spring后端vue前端
- ¥15 寻一个支付宝扫码远程授权登录的软件助手app
- ¥15 解riccati方程组
- ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
- ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
- ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
- ¥50 树莓派安卓APK系统签名
- ¥65 汇编语言除法溢出问题