1、过大年问题
七个汉字分别代表七个数字,包括0-9
//果断穷举...
public static void main(String[] args) {
int sum0;
int sum1;
int sum2;
int sum3;
int sum4;
int sum5;
int sum6;
int sum7;
int sum8;
for (int a = 0; a < 10; a++)
for (int b = 0; b < 10; b++)
for (int c = 0; c < 10; c++)
for (int d = 0; d < 10; d++)
for (int e = 0; e < 10; e++)
for (int f = 0; f < 10; f++)
for (int g = 0; g < 10; g++) {
sum0 = g;
sum1 = 10 * f + sum0;
sum2 = 100 * e + sum1;
sum3 = 1000 * d + sum2;
sum4 = 10000 * c + sum3;
sum5 = 100000 * b + sum4;
sum6 = 1000000 * a + sum5;
sum7 = sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6;
sum8 = 1111111 * d;//刚开始我用的1000000 * d+100000 * d+...醉了
if (sum7 == sum8) {
System.out.println(sum6);
break;
}
}
}
}
2、循环素数
如1193是个素数,对它循环移位发现:1931、9311、3119都是素数。
求5位最大的循环素数。
//对于这样的问题一般有两种方法:
1、分离法:即从满足条件的每一个答案进行循环,此题中对10000-99999循环,对其中每一位执行分离,最后将每一位的数值合在一起进行判断。
2、合成法:即对答案的每一位都进行循环,此题中对0-9循环,判断合成的数是否符合条件。
对此题,明显合成法更好。
public class Main {
public static void main(String[] args) {
int sum0;
int sum1;
int sum2;
int sum3;
int sum4;
for (int a = 1; a < 10; a+=2)
for (int b = 1; b < 10; b+=2)
for (int c = 1; c < 10; c+=2)
for (int d = 1; d < 10; d+=2)
for (int e = 1; e < 10; e+=2) {
sum0 =10000*a+1000*b+100*c+10*d+e;
sum1 =10000*b+1000*c+100*d+10*e+a;
sum2 =10000*c+1000*d+100*e+10*a+b;
sum3 =10000*d+1000*e+100*a+10*b+c;
sum4 =10000*e+1000*a+100*b+10*c+d;
if(f(sum0)&&f(sum1)&&f(sum2)&&f(sum3)&&f(sum4)){
System.out.println(sum0);
}
}
}
//把所有其他功能单独写成方法是一种很好的习惯
public static boolean f(int sun){
boolean tag=true;
for (int i = 2; i<=sun/2; i++)
if (sun%i==0) {
tag=false;
}
return tag;
}
}