有六个数,分别是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 seatunnel-web使用SQL组件时候后台报错,无法找到表格
- ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
- ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
- ¥30 3天&7天&&15天&销量如何统计同一行
- ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
- ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
- ¥15 vs2019中数据导出问题
- ¥20 云服务Linux系统TCP-MSS值修改?
- ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
- ¥20 怎么在stm32门禁成品上增加查询记录功能