while(m.find()){
String num = new String(m.group());
String num2 = num;
num2 = \ // 数字前添加\ ss[i] = ss[i].replace(num, num2);
if(ss[i].startsWith(\ // 去头\ ss[i] = ss[i].substring(1);
}
if(ss[i].endsWith(\ // 去尾\ ss[i] = ss[i].substring(0,ss[i].length()-1); } } }
print(ss); } }
运行结果:
you and me what cpp2005program You And Me What Cpp_2005_program
3.猜算式
看下面的算式:
□□ x □□ = □□ x □□□
它表示:两个两位数相乘等于一个两位数乘以一个三位数。 如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 该算式中1至9的每个数字出现且只出现一次! 比如:
46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 .....
请编程,输出所有可能的情况! 注意:
左边的两个乘数交换算同一方案,不要重复输出! 不同方案的输出顺序不重要
package Question1_9;
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.Vector;
public class Question3 {
public static long count=0;
6
public static List
int a=(result.elementAt(0)-'0')*10+(result.elementAt(1)-'0'); int b=(result.elementAt(2)-'0')*10+(result.elementAt(3)-'0'); int c=(result.elementAt(4)-'0')*10+(result.elementAt(5)-'0'); int
d=(result.elementAt(6)-'0')*100+(result.elementAt(7)-'0')*10+(result.elementAt(8)-'0');
if(a*b==c*d){
}
return true;
return false; }
public static void print(Vector
System.out.printf(\
x
%c%c
=
%c%c
x %c%c%c\tAt(3),vector.elementAt(4),vector.elementAt(5),vector.elementAt(6),vector.elementAt(7),vector.elementAt(8)); }
private static void fullPermutation(Vector
if(sourse.size()==0&&isfilter(result)){
boolean exit=false;
for (int i = 0; i < filteredNonRedundantResults.size(); i++) {
int ra=(result.elementAt(0)-'0')*10+(result.elementAt(1)-'0'); int rb=(result.elementAt(2)-'0')*10+(result.elementAt(3)-'0'); int
result) {
fa=(filteredNonRedundantResults.get(i).elementAt(0)-'0')*10+(filteredNonRedundantResults.get(i).elementAt(1)-'0');
int
fb=(filteredNonRedundantResults.get(i).elementAt(2)-'0')*10+(filteredNonRedundantResults.get(i).elementAt(3)-'0'); if(ra==fb&&rb==fa){ exit=true;
break; }
}
if(exit==false){
filteredNonRedundantResults.add(new Vector
return; }
for (int i = 0; i < sourse.size(); i++) { result.add(sourse.elementAt(i)); sourse.remove(i);
fullPermutation(sourse, result);
sourse.add(i, result.elementAt(result.size()-1));
7
result.remove(result.size()-1); }
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in); int n=9;
Vector
Question3.filteredNonRedundantResults=new ArrayList
for (int i = 0; i < Question3.filteredNonRedundantResults.size(); i++) {
Question3.print(Question3.filteredNonRedundantResults.get(i)); System.out.println(); sourse.add((char)('0'+i));
} } }
运行结果: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 58 x 67 = 29 x 134 58 x 69 = 23 x 174 58 x 73 = 29 x 146 58 x 96 = 32 x 174 63 x 74 = 18 x 259 64 x 79 = 32 x 158 73 x 96 = 12 x 584 76 x 98 = 14 x 532
方法二:
import java.util.List;
import java.util.ArrayList;
public class Demo01 {
static List
n[i] = i+1; // 初始化数组为1~9 } }
// 是否重复
public static boolean isDup(String s1,String s2){
8
String a1 = s1.substring(0,2); String a2 = s1.substring(2,4); String b1 = s2.substring(0,2); String b2 = s2.substring(2,4); if(a1.equals(b2)&&a2.equals(b1)){ return true; }else{
return false; } }
// 去除lis重复元素
public static void removeDuplicate(){ lis2.add(lis.get(0));
for(int i=1;i boolean flag = true; // 标记是否重复 for(int j=0;j flag = isDup(lis.get(i),lis2.get(j)); // 判断是否重复 if(flag) break; // 如果元素重复,直接跳出这层循环,测试下个数据 } if(!flag){ lis2.add(lis.get(i)); // 不重复,则添加 } } } // 输出 public static void print(){ for(String s:lis2){ String a = s.substring(0,2); String b = s.substring(2,4); String c = s.substring(4,6); String d = s.substring(6); System.out.println(a+\ } } // 检测结果,符合条件的输出 public static void check(int[] n){ StringBuffer sb = new StringBuffer(); for(int x:n){ // 数字数组转为字符串 sb.append(x); } int a = Integer.parseInt(sb.substring(0,2).toString()); int b = Integer.parseInt(sb.substring(2,4).toString()); int c = Integer.parseInt(sb.substring(4,6).toString()); int d = Integer.parseInt(sb.substring(6).toString()); if(a*b==c*d){ lis.add(sb.toString()); // 添加结果 } 9 } // 全排列进行测试 public static void allSort(int[] n,int start,int end){ if(start>=end){ check(n); // 检测结果,符合条件的输出 return ; }else{ for(int i=start;i<=end;i++){ int t = n[start]; // 交换元素 n[start] = n[i]; n[i] = t; // 递归全排列 allSort(n,start+1,end); t = n[start]; // 还原元素 n[start] = n[i]; n[i] = t; } } } public static void fun(){ int[] n = new int[9]; init(n); // 初始化数组为1~9 allSort(n,0,n.length-1); // 全排列测试 removeDuplicate(); // 去除重复元素 } public static void main(String[] args){ fun(); // print(); // 输出结果 } } 运行结果: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 58 x 67 = 29 x 134 58 x 69 = 23 x 174 58 x 73 = 29 x 146 58 x 96 = 32 x 174 63 x 74 = 18 x 259 64 x 79 = 32 x 158 73 x 96 = 12 x 584 76 x 98 = 14 x 532 4.Excel地址转换 10