第六届蓝桥杯java 三羊献瑞
2017-03-17 17:26
302 查看
三羊献瑞
观察下面的加法算式:祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
思路分析:一共有8种不同的数字,现用字母表示为a~h,每个字母用0~9中的某个数字去填充,明显,这里有两个字母是不可以为0的,这可以作为优化的一个条件。这里运用回溯算法的思想,一共需要填充8个数字,可以设一个长度为8的整形数组a,设需要输出的为a[0]~a[3]。从a[0]开始依次填充,每次符合条件继续填充下一个。代码如下:
package 第六届; public class 三羊献瑞 { public static void main(String args[]){ int a[]=new int[8]; for(int i=0;i<8;i++){ a[i]=0; } fun(a,0); } public static void fun(int a[],int n){ if(n==8){ if(check_sum(a)){ System.out.println(a[0]+""+a[1]+""+a[2]+""+a[3]); return; } }else{ for(int i=0;i<10;i++){ a =i; if(check(a,n)) fun(a,n+1); } } } public static boolean check(int a[],int n){ boolean flag=true; if(n==0){ if(a ==0) flag=false; }else{ for(int i=0;i<n;i++){ if(a[i]==a ){ flag=false; break; } } if(n==4 && a ==0) flag=false; } return flag; } public static boolean check_sum(int a[]){ int x=1000*a[4]+100*a[3]+10*a[5]+a[6]; int y=1000*a[0]+100*a[1]+10*a[2]+a[3]; int z=10000*a[0]+1000*a[1]+100*a[5]+10*a[3]+a[7]; if((x+y)==z){ return true; }else{ return false; } } }
相关文章推荐
- java第六届蓝桥杯之三羊献瑞
- 第六届蓝桥杯三羊献瑞
- 第六届 蓝桥杯 c/c++ B组 省赛 (3)——三羊献瑞
- 第六届蓝桥杯 三羊献瑞
- 第六届蓝桥杯-三羊献瑞
- 第六届 蓝桥杯 省赛 三羊献瑞
- 第六届蓝桥杯C++B组 三羊献瑞
- 第六届蓝桥杯【省赛试题3】三羊献瑞
- 【第六届蓝桥杯】三羊献瑞
- 山东省第六届蓝桥杯 ///标题:三羊献瑞//c/c++组
- 第六届蓝桥杯 三羊献瑞
- 蓝桥杯JAVA语言B组_三羊献瑞
- 第六届蓝桥杯三羊献瑞暴力
- 2015第六届蓝桥杯C++B组第三题:三羊献瑞
- 蓝桥杯第六届 三羊献瑞(dfs)
- 蓝桥杯---三羊献瑞
- 蓝桥杯--三羊献瑞
- 三羊献瑞+祥瑞生辉(15年蓝桥杯)
- 第六届蓝桥杯JAVAB组初赛第三题
- 蓝桥杯—三羊献瑞,祥瑞生辉+三羊献瑞