面试题求解!!!!!!!!!!!!

影神 2013-08-23 02:21:04
用1到9组成3个三位数(每个数字只能用一次),使其中两个数的和等于第三个数


要求数组方法,输出所有满足条件的等式(如124 + 659 = 783
125 + 739 = 864)
...全文
293 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaqiu_2003 2013-08-23
  • 打赏
  • 举报
回复
我觉得这个是个求排列的问题。假设有1~9的全排列,记录下满足前3位加中间三位等于后三位即可。

public class NineNumber {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String test = "123456789";
		char[] chars = test.toCharArray();
		allSort(chars, 0, chars.length - 1);
	}

	private static StringBuilder TEMP = new StringBuilder();

	public static void allSort(char[] buf, int start, int end) {
		if (start == end) {
			for (int i = 0; i <= end; i++) {
				TEMP.append(buf[i]);
			}
			numberChecker();
		} else {
			for (int i = start; i <= end; i++) {
				char temp = buf[start];
				buf[start] = buf[i];
				buf[i] = temp;

				allSort(buf, start + 1, end);

				temp = buf[start];
				buf[start] = buf[i];
				buf[i] = temp;
			}
		}
	}

	private static void numberChecker() {
		Integer sum1 = Integer.parseInt(TEMP.substring(0, 3));
		Integer sum2 = Integer.parseInt(TEMP.substring(3, 6));
		Integer sum3 = Integer.parseInt(TEMP.substring(6, 9));
		if((sum1+sum2) == sum3){
			System.out.println(sum1 + " + " + sum2 + " = " + sum3);
		}
		TEMP.replace(0, TEMP.length(), "");
	}
}
结果如下: 124 + 659 = 783 125 + 739 = 864 127 + 359 = 486 127 + 368 = 495 128 + 439 = 567 128 + 367 = 495 129 + 438 = 567 129 + 654 = 783 129 + 735 = 864 129 + 357 = 486 134 + 658 = 792 135 + 729 = 864 138 + 429 = 567 138 + 654 = 792 139 + 428 = 567 139 + 725 = 864 143 + 586 = 729 142 + 596 = 738 142 + 695 = 837 145 + 692 = 837 146 + 583 = 729 146 + 592 = 738 154 + 629 = 783 154 + 638 = 792 154 + 782 = 936 152 + 487 = 639 152 + 784 = 936 157 + 482 = 639 157 + 329 = 486 158 + 634 = 792 159 + 624 = 783 159 + 327 = 486 163 + 782 = 945 162 + 387 = 549 162 + 783 = 945 167 + 328 = 495 167 + 382 = 549 168 + 327 = 495 173 + 286 = 459 173 + 295 = 468 175 + 293 = 468 176 + 283 = 459 183 + 492 = 675 183 + 546 = 729 183 + 762 = 945 183 + 276 = 459 184 + 392 = 576 184 + 752 = 936 186 + 543 = 729 186 + 273 = 459 187 + 452 = 639 187 + 362 = 549 182 + 457 = 639 182 + 493 = 675 182 + 754 = 936 182 + 763 = 945 182 + 367 = 549 182 + 394 = 576 193 + 482 = 675 193 + 275 = 468 194 + 382 = 576 195 + 642 = 837 195 + 273 = 468 196 + 542 = 738 192 + 483 = 675 192 + 546 = 738 192 + 645 = 837 192 + 384 = 576 214 + 569 = 783 214 + 659 = 873 215 + 478 = 693 215 + 748 = 963 216 + 378 = 594 216 + 738 = 954 218 + 475 = 693 218 + 439 = 657 218 + 745 = 963 218 + 736 = 954 218 + 376 = 594 218 + 349 = 567 219 + 438 = 657 219 + 564 = 783 219 + 654 = 873 219 + 348 = 567 234 + 657 = 891 235 + 746 = 981 236 + 718 = 954 236 + 745 = 981 237 + 654 = 891 238 + 419 = 657 238 + 716 = 954 239 + 418 = 657 243 + 576 = 819 243 + 675 = 918 241 + 596 = 837 245 + 673 = 918 245 + 736 = 981 245 + 718 = 963 246 + 573 = 819 246 + 591 = 837 246 + 735 = 981 248 + 715 = 963 248 + 319 = 567 249 + 318 = 567 254 + 619 = 873 254 + 637 = 891 251 + 397 = 648 257 + 634 = 891 257 + 391 = 648 259 + 614 = 873 264 + 519 = 783 269 + 514 = 783 273 + 546 = 819 273 + 591 = 864 273 + 645 = 918 273 + 681 = 954 273 + 186 = 459 273 + 195 = 468 275 + 418 = 693 275 + 643 = 918 275 + 193 = 468 276 + 543 = 819 276 + 318 = 594 276 + 183 = 459 271 + 593 = 864 271 + 683 = 954 278 + 415 = 693 278 + 316 = 594 283 + 671 = 954 283 + 176 = 459 284 + 391 = 675 286 + 173 = 459 281 + 673 = 954 281 + 394 = 675 293 + 571 = 864 293 + 175 = 468 294 + 381 = 675 295 + 173 = 468 296 + 541 = 837 297 + 351 = 648 291 + 546 = 837 291 + 573 = 864 291 + 357 = 648 291 + 384 = 675 324 + 567 = 891 324 + 657 = 981 327 + 564 = 891 327 + 519 = 846 327 + 654 = 981 327 + 618 = 945 327 + 159 = 486 327 + 168 = 495 328 + 617 = 945 328 + 167 = 495 329 + 517 = 846 329 + 157 = 486 314 + 658 = 972 316 + 278 = 594 317 + 529 = 846 317 + 628 = 945 318 + 654 = 972 318 + 627 = 945 318 + 276 = 594 318 + 249 = 567 319 + 527 = 846 319 + 248 = 567 341 + 586 = 927 342 + 576 = 918 346 + 572 = 918 346 + 581 = 927 348 + 219 = 567 349 + 218 = 567 351 + 297 = 648 354 + 627 = 981 354 + 618 = 972 352 + 467 = 819 357 + 462 = 819 357 + 291 = 648 357 + 624 = 981 357 + 129 = 486 358 + 614 = 972 359 + 127 = 486 364 + 527 = 891 362 + 457 = 819 362 + 187 = 549 367 + 452 = 819 367 + 524 = 891 367 + 128 = 495 367 + 182 = 549 368 + 127 = 495 376 + 542 = 918 376 + 218 = 594 372 + 546 = 918 378 + 216 = 594 381 + 546 = 927 381 + 294 = 675 384 + 192 = 576 384 + 291 = 675 386 + 541 = 927 387 + 162 = 549 382 + 167 = 549 382 + 194 = 576 391 + 257 = 648 391 + 284 = 675 394 + 182 = 576 394 + 281 = 675 397 + 251 = 648 392 + 184 = 576 428 + 139 = 567 429 + 138 = 567 438 + 129 = 567 438 + 219 = 657 439 + 128 = 567 439 + 218 = 657 415 + 278 = 693 418 + 275 = 693 418 + 239 = 657 419 + 238 = 657 452 + 187 = 639 452 + 367 = 819 457 + 182 = 639 457 + 362 = 819 462 + 357 = 819 467 + 352 = 819 475 + 218 = 693 478 + 215 = 693 483 + 192 = 675 487 + 152 = 639 482 + 157 = 639 482 + 193 = 675 493 + 182 = 675 492 + 183 = 675 524 + 367 = 891 527 + 319 = 846 527 + 364 = 891 529 + 317 = 846 543 + 276 = 819 543 + 186 = 729 542 + 376 = 918 542 + 196 = 738 541 + 296 = 837 541 + 386 = 927 546 + 273 = 819 546 + 291 = 837 546 + 183 = 729 546 + 192 = 738 546 + 372 = 918 546 + 381 = 927 514 + 269 = 783 517 + 329 = 846 519 + 264 = 783 519 + 327 = 846 564 + 327 = 891 564 + 219 = 783 567 + 324 = 891 569 + 214 = 783 573 + 246 = 819 573 + 291 = 864 571 + 293 = 864 576 + 342 = 918 576 + 243 = 819 572 + 346 = 918 583 + 146 = 729 581 + 346 = 927 586 + 143 = 729 586 + 341 = 927 593 + 271 = 864 591 + 273 = 864 591 + 246 = 837 596 + 142 = 738 596 + 241 = 837 592 + 146 = 738 624 + 357 = 981 624 + 159 = 783 627 + 354 = 981 627 + 318 = 945 628 + 317 = 945 629 + 154 = 783 634 + 257 = 891 634 + 158 = 792 637 + 254 = 891 638 + 154 = 792 643 + 275 = 918 642 + 195 = 837 645 + 273 = 918 645 + 192 = 837 654 + 327 = 981 654 + 318 = 972 654 + 237 = 891 654 + 219 = 873 654 + 129 = 783 654 + 138 = 792 657 + 234 = 891 657 + 324 = 981 658 + 134 = 792 658 + 314 = 972 659 + 214 = 873 659 + 124 = 783 614 + 358 = 972 614 + 259 = 873 617 + 328 = 945 618 + 354 = 972 618 + 327 = 945 619 + 254 = 873 673 + 245 = 918 673 + 281 = 954 675 + 243 = 918 671 + 283 = 954 683 + 271 = 954 681 + 273 = 954 695 + 142 = 837 692 + 145 = 837 725 + 139 = 864 729 + 135 = 864 735 + 246 = 981 735 + 129 = 864 736 + 245 = 981 736 + 218 = 954 738 + 216 = 954 739 + 125 = 864 745 + 236 = 981 745 + 218 = 963 746 + 235 = 981 748 + 215 = 963 754 + 182 = 936 752 + 184 = 936 763 + 182 = 945 762 + 183 = 945 715 + 248 = 963 716 + 238 = 954 718 + 245 = 963 718 + 236 = 954 783 + 162 = 945 784 + 152 = 936 782 + 154 = 936 782 + 163 = 945 当然也有很多优化的余地,比如起始的组合要大于 123+456=576 -->123456576 仅供参考。
失落夏天 2013-08-23
  • 打赏
  • 举报
回复
两种方法, 第一种,三层for循环,这种方法是最简单的,但是即使答出来,也只能给60分。 第二种,递归获取所有的组合,然后对这个组合进行遍历,找出符合条件的,这个估计能给90分。 时间限制,先写一个第一种吧。谁有兴趣可以试试第二种

package com.lxl;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Test4 {
	public static void main(String[] args) {
		for(int i1=100;i1<999;i1++){
			for(int i2=100;i2<999;i2++){
				for(int i3=100;i3<999;i3++){
					if(haveTrue(i1, i2, i3)){
						if((i1+i2)==i3){
							System.out.println(i1+"+"+i2+"="+i3);
						}
					}
				}
			}
		}
		
	}
	public static boolean haveTrue(int a,int b,int c){
		int[] i=new int[]{1,2,3,4,5,6,7,8,9};
		
		if(a<100||b<100||c<100){
			return false;
		}
		//检验是否没有重复数字
		for(int k:getNum(a)){
			if(k>0){
				i[k-1]=0;
			}
		}
		for(int k:getNum(b)){
			if(k>0){
				i[k-1]=0;
			}
		}
		for(int k:getNum(c)){
			if(k>0){
				i[k-1]=0;
			}
		}
		for(int p:i){
			if(p!=0)return false;
		}
		
		return true;
	}
	public static int[] getNum(int num){
		int num100=num/100;
		int num10=(num-100*num100)/10;
		int num1=num-100*num100-num10*10;
		return new int[]{num100,num10,num1};
	}
}
zyrobert 2013-08-23
  • 打赏
  • 举报
回复
不会 帮顶。。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧