题目用1到9组成3个三位数(每个数字只能用一次),使其中两个数的和等于第三个数
要求数组方法,输出所有满足条件的等式(如124 + 659 = 783
125 + 739 = 864)
我自己写的
import java.util.* ;
public class ArrayTest {
public static void main(String[] args){
int[] arr = new int[9*8*7];
int i , j , k , x = 0 ;
for(i = 1 ; i < 10 ; i ++){
for(j =1 ; j < 10 ; j ++){
if(j == i){
continue ;
}
for(k = 1; k < 10 ; k ++){
if(k == j||k==i){
continue ;
}
arr[x] = 100*i+10*j+k ;
x ++ ;
}
}
}
for(int a = 0 ; a <= arr.length ; a ++){
for(int b = 0 ; b <= arr.length ; b ++){
for(int c = 0 ; c <= arr.length ; c ++){
if((arr[a]+arr[b])==arr[c]){
System.out.print(arr[a]+"+"+arr[b]+"="+arr[c]);
}
}
}
}
}
}
输出异常123+123=246Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 504
at ArrayTest.main(ArrayTest.java:23)
要求数组方法,输出所有满足条件的等式(如124 + 659 = 783
125 + 739 = 864)
我自己写的
import java.util.* ;
public class ArrayTest {
public static void main(String[] args){
int[] arr = new int[9*8*7];
int i , j , k , x = 0 ;
for(i = 1 ; i < 10 ; i ++){
for(j =1 ; j < 10 ; j ++){
if(j == i){
continue ;
}
for(k = 1; k < 10 ; k ++){
if(k == j||k==i){
continue ;
}
arr[x] = 100*i+10*j+k ;
x ++ ;
}
}
}
for(int a = 0 ; a <= arr.length ; a ++){
for(int b = 0 ; b <= arr.length ; b ++){
for(int c = 0 ; c <= arr.length ; c ++){
if((arr[a]+arr[b])==arr[c]){
System.out.print(arr[a]+"+"+arr[b]+"="+arr[c]);
}
}
}
}
}
}
输出异常123+123=246Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 504
at ArrayTest.main(ArrayTest.java:23)
b <= arr.length
c <= arr.length
你的问题就出在这里的"="上面,下标值等于数组长度的时候就越界了,写成小于就可以了
a < arr.length
b < arr.length
c < arr.length粗心了吧
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
arrange(arr, 8);
} public static void arrange(int[] arr, int n) {
if (n == 0) {
return;
} else {
for (int i = 0; i < n; i++) {
swap(arr, i, n);
arrange(arr, n - 1);
if (n == 1) {
istrue(arr);
}
swap(arr, i, n);
}
arrange(arr, n - 1);
if (n == 1) {
istrue(arr);
}
}
} public static void swap(int[] arr, int i, int j) {
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp; } public static void istrue(int[] arr) {
int num1 = arr[0] * 100 + arr[1] * 10 + arr[2];
int num2 = arr[3] * 100 + arr[4] * 10 + arr[5];
int num3 = arr[6] * 100 + arr[7] * 10 + arr[8];
if (num1 + num2 == num3) {
System.out.println(num1 + "+" + num2 + "=" + num3);
}
}
}
import java.util.List;/**
* 用1到9组成3个三位数(每个数字只能用一次),使其中两个数的和等于第三个数
*
* @author Administrator
*
*/
public class SumTest {
public static void main(String[] args) {
SumTest test = new SumTest();
/*
* 第一个数的集合
*/
List<Integer> list = test.generateNumber();
/*
* 第二个数的集合
*/ List<Integer> copyList = new ArrayList<Integer>();
copyList.addAll(list);
/*
* 所有和的集合
*/
List<Integer> sumList = new ArrayList<Integer>();
sumList.addAll(list);
/*
* 检查并输出满足要求所有数字
*/
test.checkAllNumber(list, copyList, sumList);
} /**
* 得到一个集合,这个集合中包含了由1-9组成的三位数。并且每个三位数每一位都不重复
*
* @return
*/
public List<Integer> generateNumber() {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i == j) {
continue;
}
for (int k = 1; k < 10; k++) {
if (i == k || j == k) {
continue;
}
list.add(Integer.parseInt(i + "" + j + "" + k));
}
}
}
return list;
} /**
* 检查三个数,保证三个数每一位都不相同
*
* @param number1List
* 第一个数
* @param number2List
* 第二个数
* @param sumList
* 第三个数
*/
public void checkAllNumber(List<Integer> number1List,
List<Integer> number2List, List<Integer> sumList) {
for (int i = 1; i < number1List.size(); i++) {
for (int j = 1; j < number2List.size(); j++) {
if (!checkNumber(number1List.get(i), number2List.get(j))) {
continue;
}
for (int k = 1; k < sumList.size(); k++) {
if (!checkNumber(number1List.get(i), sumList.get(k))
|| !checkNumber(number2List.get(j), sumList.get(k))) {
continue;
}
outputNumber(number1List.get(i), number2List.get(j),
sumList.get(k));
}
}
}
} /**
* 检查两个数,保证两个数每一位都不相同
*
* @param number
* @param number2
* @return 如果有一位相同,返回<code>false</code>, 否则,返回<code>true</code>
*/
public boolean checkNumber(int number, int number2) {
String n1 = number + "";
String n2 = number2 + "";
if (n1.length() != n2.length()) {
return false;
}
for (int i = 0; i < n1.length(); i++) {
for (int j = 0; j < n2.length(); j++) {
if (n1.charAt(i) == n2.charAt(j)) {
return false;
}
}
}
return true;
} /**
* 如果<code>number1+number2=sum</code>, output.<br>
* output format:<code>number1+number2=sum</code> such as:
* <code>752+184=936</code>
*
* @param number1
* 第一个数
* @param number2
* 第二个数
* @param sum
* 和
*/
public void outputNumber(int number1, int number2, int sum) {
if (number1 + number2 == sum) {
System.out.println(number1 + "+" + number2 + "=" + sum);
}
}}
public static void main(String[] args) {
new Miooo().f(0);
} private final int M = 9;
private int[] list = new int[M];
private int num = 0; private void f(int n) {
if (n == M) {
print();
} else {
for (int i = 1; i <= M; i++) {
if (!has(n, i)) {
list[n] = i;
f(n + 1);
}
}
}
} private boolean has(int n, int i) {
for (int k = 0; k < n; k++)
if (list[k] == i)
return true;
return false;
} private void print() {
int a = list[0] * 100 + list[1] * 10 + list[2];
int b = list[3] * 100 + list[4] * 10 + list[5];
int c = list[6] * 100 + list[7] * 10 + list[8];
if ((a + b) != c)
return;
System.out.println(num++ + ":" + a + "+" + b + "=" + c);
}
}
/**2013-8-28Demo.javaAdministrator
*
*/
package com.lori_xj.test;/**
* TODO
*
* @author
* @date2013-8-28
*/
public class Demo {
public static void main(String[] args){
int[] arr = new int[9*8*7];
int i , j , k , x = 0 ;
for(i = 1 ; i < 10 ; i ++){
for(j =1 ; j < 10 ; j ++){
if(j == i){
continue ;
}
for(k = 1; k < 10 ; k ++){
if(k == j||k==i){
continue ;
}
arr[x] = 100*i+10*j+k ;
x ++ ;
}
}
}
for(int a = 0 ; a < arr.length ; a ++){
for(int b = 0 ; b < arr.length ; b ++){
for(int c = 0 ; c <arr.length ; c ++){
if((arr[a]+arr[b])==arr[c]){
System.out.println(arr[a]+"+"+arr[b]+"="+arr[c]);
}
}
}
}
}
}