123456789 简单程序,谁来救下我啊

jaehe 2009-08-13 11:52:16
问个问题:
123456789 九个数分别组成3个3位数,其中两个相加等于第三个。编程求出这些三位数有哪些?
应该怎么构思?

我用数组int[] a = new int[10];然后做个循环后,使得
for(s = 0,n = 1; n < 10;n ++){
s = s + a[n];
}
if(s == 9){
System.out.println(); //打印出三个数
}
但在循环体总觉得实现不好,结果溢出。
...全文
519 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
gococo 2009-08-16
  • 打赏
  • 举报
回复
。。错了。我要回复的是20楼。。汗!~~
gococo 2009-08-16
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 foolishdault 的回复:]
优化了一下14楼的代码,执行耗时= 125 毫秒
Java codepublicclass FindNum {/**
*@param args*/publicstaticvoid main(String[] args) {long start=System.currentTimeMillis();for (int i=123; i<=987; i++) {// 第二个数字最小是234,最大是864for (int j=234; j<=500; j++) {int result= i+ j;if (isValid(i, j, result)) {
System.out.println(i+" +"+ j+" ="+ (i+ j));
}
}
}long time= System.currentTimeMillis()- start;
System.out.println("耗时="+time+" 毫秒");
}privatestaticboolean isValid(int a,int b,int c) {if (containZero(a)|| containZero(b)|| containZero(c)) {returnfalse;
}if (c>=999) {// 和>=999的时候无效returnfalse;
}
String num1= Integer.toString(a);
String num2= Integer.toString(b);
String num3= Integer.toString(c);
String numStr= num1+ num2+ num3;if (numStr.indexOf("0")>0) {// 有0的时候无效returnfalse;
}// 数字是否有重复return!isDuplicate(numStr);
}publicstaticboolean isDuplicate(String numStr) {
String[] allNum= {"1","2","3","4","5","6","7","8","9" };for (String num : allNum) {if (numStr.indexOf(num)!= numStr.lastIndexOf(num)) {returntrue;
}
}returnfalse;
}publicstaticboolean containZero(int num){return num%10==0;
}
}
[/Quote]


我有个想法,可以把得到的结果,全都拆分掉,然后放入hashset。如果它的size=9,那么就是没有重复的,输出
快乐的2 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 zyb134506 的回复:]
package csdn.java;
import java.util.*;
public class Test {

Test tens = null;
Test hundreds = null;
int first = 0;
int second = 0;
int last = 0;
public Test(Test test){
this.first = test.first;
this.second = test.second;
this.last = test.last;
this.tens = test.tens;
this.hundreds = test.hundreds;
}
public Test(int first, int second, int last){
this.first = first;
this.second = second;
this.last = last;
}
public void addTens(Test tens) throws Exception{
if(repeat(tens.first)||repeat(tens.second)||repeat(tens.last))
throw new Exception("Number reapt exception.");
this.tens = tens;
}
private boolean repeat(int number){
if(number == this.first)
return true;
if(number == this.second)
return true;
if(number == this.last)
return true;
return false;
}
public void addHundreds(Test hundreds) throws Exception{
if(repeat(hundreds.first)||repeat(hundreds.second)||
repeat(hundreds.last))
throw new Exception("Number reapt exception.");
this.hundreds = hundreds;
}

public String toString(){
StringBuffer bs = new StringBuffer();
bs.append(hundreds.first);
bs.append(tens.first);
bs.append(this.first);
bs.append(" + ");
bs.append(hundreds.second);
bs.append(tens.second);
bs.append(this.second);
bs.append(" = ");
bs.append(hundreds.last);
bs.append(tens.last);
bs.append(this.last);
return bs.toString();
}
public static List <Integer> getNewList(){
List <Integer> list = new ArrayList <Integer>();
for(int i = 0; i < 10; i++){
list.add(Integer.valueOf(i));
}
return list;
}

//由已确定的3位数字的个位,选择3位数字中的十位。
/*
* @tag[] 标记已经选定的个位(3个)
* @jinwei 个位数字相加的进位
* @test 已经选择的3个个位数字
*/
public static List <Test> chooseTens(boolean tag[],int jinwei,Test test){
boolean myTag[] = new boolean[tag.length];
System.arraycopy(tag, 0, myTag, 0, tag.length);
List <Test> nums  = new ArrayList <Test>();
for(int i = 1; i < 10; i++){
if(myTag[i]) continue;
for(int j = 1; j < 10; j++){
if(myTag[j] || j==i) continue;
for(int h = 1; h < 10; h++){
if(h == i || myTag[h] || h==j) continue;
if((h+j+jinwei)%10==i){
myTag[j] = myTag[h] = myTag[i] = true;
int jinwei1 = 0;
if(h+j+jinwei > 10){
jinwei1 = 1;
}
.....
[/Quote]
代码是多了点,不过比楼主的执行时间要低很多.
在我机器上我的代码是16MS,楼主的药260左右.
把分都给我吧,哈哈.
findusefulthings 2009-08-15
  • 打赏
  • 举报
回复
JF的,lz不给对不起我
Sou2012 2009-08-15
  • 打赏
  • 举报
回复
路过。!!帮顶!
fxg0110 2009-08-15
  • 打赏
  • 举报
回复
平时比较多玩算法,希望楼主能看到我这一楼,嘻嘻。
如果是想要效率高的话,首先代码可能会比较长,只是可能,其次就是做些编程外的计算可能大大提高实际效率。
回到楼主的题目,其实就是要找出三个数字min,mid,max(假设已经区分大小)
最简单的思路就是三个嵌套循环,但其实各个循环中的循环次数是可以修正的
就好像对min而言,他最小不可能001,也不可能是111,这个由题目中很容易得到
min的下限首先可以想到是123
同样道理,我们可以去推断出各个数字的上下限,那么也就可以优化循环次数。

举个例子如何去缩减min范围,因为是min+mid=max
那么min百位数最大也就是4咯
然后对百位数为4去判断一下,由于这是min,已经是最小,那么可以得到:
min 4 ? ?
mid 5 ? ?
max 9 ? ?
剩下的六个问号可以肯定不会对百位进位,问号可能是1,2,3,6,7,8
假设个位数也不会对十位数进位,问号中有三个奇数,三个偶数
由于奇+奇=偶,偶+偶=偶,奇+偶=奇;这里面无法构成三奇三偶的两个式子,所以不进位不可能
那么只能个位数对十位数进位咯,那第二列的数字铁定只能取1,6,8,剩余2,3,7无法符合题意
所以min百位数不能为4,接着就退3,类似的可以继续退,这里就不说了

最后可以得到min范围是[124,386]
mid范围是[(min/100+1)*100+12,784]

剩下的上面不少高人已经说了,我小生就不多言了,嘻嘻
SurpassAnything 2009-08-14
  • 打赏
  • 举报
回复
路过。。
bayougeng 2009-08-14
  • 打赏
  • 举报
回复
一共252种组合,但是很遗憾,有重复的。
比如:
245 + 736 = 981
736 + 245 = 981
算作了两个组合,其实是一个。

有点意思了,谁能再想想怎么去掉重复。
铁匠梁老师 2009-08-14
  • 打赏
  • 举报
回复
优化了一下14楼的代码,执行 耗时= 125 毫秒

public class FindNum {

/**
* @param args
*/
public static void main(String[] args) {
long start=System.currentTimeMillis();
for (int i = 123; i <= 987; i++) {
// 第二个数字最小是234,最大是864
for (int j = 234; j <= 500; j++) {
int result = i + j;
if (isValid(i, j, result)) {
System.out.println(i + " + " + j + " = " + (i + j));
}
}
}
long time = System.currentTimeMillis() - start;
System.out.println("耗时= "+time+" 毫秒");
}

private static boolean isValid(int a, int b, int c) {
if (containZero(a) || containZero(b) || containZero(c)) {
return false;
}
if (c >= 999) {
// 和>=999的时候无效
return false;
}
String num1 = Integer.toString(a);
String num2 = Integer.toString(b);
String num3 = Integer.toString(c);
String numStr = num1 + num2 + num3;
if (numStr.indexOf("0") > 0) {
// 有0的时候无效
return false;
}
// 数字是否有重复
return !isDuplicate(numStr);
}

public static boolean isDuplicate(String numStr) {
String[] allNum = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
for (String num : allNum) {
if (numStr.indexOf(num) != numStr.lastIndexOf(num)) {
return true;
}
}
return false;
}

public static boolean containZero(int num){
return num%10==0;
}
}
铁匠梁老师 2009-08-14
  • 打赏
  • 举报
回复
学习了,算法算起来很乏味。
人生如梦198201 2009-08-14
  • 打赏
  • 举报
回复
学习
jaehe 2009-08-14
  • 打赏
  • 举报
回复
沙发 坐
sharon8259 2009-08-14
  • 打赏
  • 举报
回复
学习。。。。
StrutHibernate 2009-08-14
  • 打赏
  • 举报
回复
7L代码所用时间:程序总共所用时间:21406(ms),但结果比较全面。太多贴不上来。
14L代码结果及所用时间:234ms

开始时间:1250219449453
124 + 659 = 783
125 + 739 = 864
127 + 359 = 486
127 + 368 = 495
128 + 367 = 495
128 + 439 = 567
129 + 357 = 486
129 + 438 = 567
129 + 654 = 783
129 + 735 = 864
134 + 658 = 792
135 + 729 = 864
138 + 429 = 567
138 + 654 = 792
139 + 428 = 567
139 + 725 = 864
142 + 596 = 738
142 + 695 = 837
143 + 586 = 729
145 + 692 = 837
146 + 583 = 729
146 + 592 = 738
152 + 487 = 639
152 + 784 = 936
154 + 629 = 783
154 + 638 = 792
154 + 782 = 936
157 + 329 = 486
157 + 482 = 639
158 + 634 = 792
159 + 327 = 486
159 + 624 = 783
162 + 387 = 549
162 + 783 = 945
163 + 782 = 945
167 + 328 = 495
167 + 382 = 549
168 + 327 = 495
173 + 286 = 459
173 + 295 = 468
175 + 293 = 468
176 + 283 = 459
182 + 367 = 549
182 + 394 = 576
182 + 457 = 639
182 + 493 = 675
182 + 754 = 936
182 + 763 = 945
183 + 276 = 459
183 + 492 = 675
183 + 546 = 729
183 + 762 = 945
184 + 392 = 576
184 + 752 = 936
186 + 273 = 459
186 + 543 = 729
187 + 362 = 549
187 + 452 = 639
192 + 384 = 576
192 + 483 = 675
192 + 546 = 738
192 + 645 = 837
193 + 275 = 468
193 + 482 = 675
194 + 382 = 576
195 + 273 = 468
195 + 642 = 837
196 + 542 = 738
214 + 569 = 783
214 + 659 = 873
215 + 478 = 693
215 + 748 = 963
216 + 378 = 594
216 + 738 = 954
218 + 349 = 567
218 + 376 = 594
218 + 439 = 657
218 + 475 = 693
218 + 736 = 954
218 + 745 = 963
219 + 348 = 567
219 + 438 = 657
219 + 564 = 783
219 + 654 = 873
234 + 657 = 891
235 + 746 = 981
236 + 718 = 954
236 + 745 = 981
237 + 654 = 891
238 + 419 = 657
238 + 716 = 954
239 + 418 = 657
241 + 596 = 837
243 + 576 = 819
243 + 675 = 918
245 + 673 = 918
245 + 718 = 963
245 + 736 = 981
246 + 573 = 819
246 + 591 = 837
246 + 735 = 981
248 + 319 = 567
248 + 715 = 963
249 + 318 = 567
251 + 397 = 648
254 + 619 = 873
254 + 637 = 891
257 + 391 = 648
257 + 634 = 891
259 + 614 = 873
264 + 519 = 783
269 + 514 = 783
271 + 593 = 864
271 + 683 = 954
273 + 546 = 819
273 + 591 = 864
273 + 645 = 918
273 + 681 = 954
275 + 418 = 693
275 + 643 = 918
276 + 318 = 594
276 + 543 = 819
278 + 316 = 594
278 + 415 = 693
281 + 394 = 675
281 + 673 = 954
283 + 671 = 954
284 + 391 = 675
291 + 357 = 648
291 + 384 = 675
291 + 546 = 837
291 + 573 = 864
293 + 571 = 864
294 + 381 = 675
296 + 541 = 837
297 + 351 = 648
314 + 658 = 972
316 + 278 = 594
317 + 529 = 846
317 + 628 = 945
318 + 249 = 567
318 + 276 = 594
318 + 627 = 945
318 + 654 = 972
319 + 248 = 567
319 + 527 = 846
324 + 567 = 891
324 + 657 = 981
327 + 519 = 846
327 + 564 = 891
327 + 618 = 945
327 + 654 = 981
328 + 617 = 945
329 + 517 = 846
341 + 586 = 927
342 + 576 = 918
346 + 572 = 918
346 + 581 = 927
351 + 297 = 648
352 + 467 = 819
354 + 618 = 972
354 + 627 = 981
357 + 291 = 648
357 + 462 = 819
357 + 624 = 981
358 + 614 = 972
362 + 457 = 819
364 + 527 = 891
367 + 452 = 819
367 + 524 = 891
372 + 546 = 918
376 + 542 = 918
381 + 294 = 675
381 + 546 = 927
384 + 291 = 675
386 + 541 = 927
391 + 257 = 648
391 + 284 = 675
394 + 281 = 675
397 + 251 = 648
415 + 278 = 693
418 + 239 = 657
418 + 275 = 693
419 + 238 = 657
452 + 367 = 819
457 + 362 = 819
462 + 357 = 819
467 + 352 = 819
514 + 269 = 783
517 + 329 = 846
519 + 264 = 783
519 + 327 = 846
524 + 367 = 891
527 + 319 = 846
527 + 364 = 891
529 + 317 = 846
541 + 296 = 837
541 + 386 = 927
542 + 376 = 918
543 + 276 = 819
546 + 273 = 819
546 + 291 = 837
546 + 372 = 918
546 + 381 = 927
564 + 327 = 891
567 + 324 = 891
571 + 293 = 864
572 + 346 = 918
573 + 246 = 819
573 + 291 = 864
576 + 243 = 819
576 + 342 = 918
581 + 346 = 927
586 + 341 = 927
591 + 246 = 837
591 + 273 = 864
593 + 271 = 864
596 + 241 = 837
614 + 259 = 873
614 + 358 = 972
617 + 328 = 945
618 + 327 = 945
618 + 354 = 972
619 + 254 = 873
624 + 357 = 981
627 + 318 = 945
627 + 354 = 981
628 + 317 = 945
634 + 257 = 891
637 + 254 = 891
643 + 275 = 918
645 + 273 = 918
654 + 237 = 891
654 + 318 = 972
654 + 327 = 981
657 + 234 = 891
657 + 324 = 981
658 + 314 = 972
671 + 283 = 954
673 + 245 = 918
673 + 281 = 954
675 + 243 = 918
681 + 273 = 954
683 + 271 = 954
715 + 248 = 963
716 + 238 = 954
718 + 236 = 954
718 + 245 = 963
735 + 246 = 981
736 + 245 = 981
745 + 236 = 981
746 + 235 = 981
结束时间:1250219449687
程序总共所用时间:234
StrutHibernate 2009-08-14
  • 打赏
  • 举报
回复
LZ代码所用时间:97ms

开始时间:1250218940890
i=124 j=659 k=783
i=125 j=739 k=864
i=127 j=359 k=486
i=127 j=368 k=495
i=128 j=367 k=495
i=128 j=439 k=567
i=129 j=357 k=486
i=129 j=438 k=567
i=129 j=654 k=783
i=129 j=735 k=864
i=134 j=658 k=792
i=135 j=729 k=864
i=138 j=429 k=567
i=138 j=654 k=792
i=139 j=428 k=567
i=139 j=725 k=864
i=142 j=596 k=738
i=142 j=695 k=837
i=143 j=586 k=729
i=145 j=692 k=837
i=146 j=583 k=729
i=146 j=592 k=738
i=152 j=487 k=639
i=152 j=784 k=936
i=154 j=629 k=783
i=154 j=638 k=792
i=154 j=782 k=936
i=157 j=329 k=486
i=157 j=482 k=639
i=158 j=634 k=792
i=159 j=327 k=486
i=159 j=624 k=783
i=162 j=387 k=549
i=162 j=783 k=945
i=163 j=782 k=945
i=167 j=328 k=495
i=167 j=382 k=549
i=168 j=327 k=495
i=173 j=286 k=459
i=173 j=295 k=468
i=175 j=293 k=468
i=176 j=283 k=459
i=182 j=367 k=549
i=182 j=394 k=576
i=182 j=457 k=639
i=182 j=493 k=675
i=182 j=754 k=936
i=182 j=763 k=945
i=183 j=276 k=459
i=183 j=492 k=675
i=183 j=546 k=729
i=183 j=762 k=945
i=184 j=392 k=576
i=184 j=752 k=936
i=186 j=273 k=459
i=186 j=543 k=729
i=187 j=362 k=549
i=187 j=452 k=639
i=192 j=384 k=576
i=192 j=483 k=675
i=192 j=546 k=738
i=192 j=645 k=837
i=193 j=275 k=468
i=193 j=482 k=675
i=194 j=382 k=576
i=195 j=273 k=468
i=195 j=642 k=837
i=196 j=542 k=738
i=214 j=569 k=783
i=214 j=659 k=873
i=215 j=478 k=693
i=215 j=748 k=963
i=216 j=378 k=594
i=216 j=738 k=954
i=218 j=349 k=567
i=218 j=376 k=594
i=218 j=439 k=657
i=218 j=475 k=693
i=218 j=736 k=954
i=218 j=745 k=963
i=219 j=348 k=567
i=219 j=438 k=657
i=219 j=564 k=783
i=219 j=654 k=873
i=234 j=657 k=891
i=235 j=746 k=981
i=236 j=718 k=954
i=236 j=745 k=981
i=237 j=654 k=891
i=238 j=419 k=657
i=238 j=716 k=954
i=239 j=418 k=657
i=241 j=596 k=837
i=243 j=576 k=819
i=243 j=675 k=918
i=245 j=673 k=918
i=245 j=718 k=963
i=245 j=736 k=981
i=246 j=573 k=819
i=246 j=591 k=837
i=246 j=735 k=981
i=248 j=319 k=567
i=248 j=715 k=963
i=249 j=318 k=567
i=251 j=397 k=648
i=254 j=619 k=873
i=254 j=637 k=891
i=257 j=391 k=648
i=257 j=634 k=891
i=259 j=614 k=873
i=264 j=519 k=783
i=269 j=514 k=783
i=271 j=593 k=864
i=271 j=683 k=954
i=273 j=186 k=459
i=273 j=195 k=468
i=273 j=546 k=819
i=273 j=591 k=864
i=273 j=645 k=918
i=273 j=681 k=954
i=275 j=193 k=468
i=275 j=418 k=693
i=275 j=643 k=918
i=276 j=183 k=459
i=276 j=318 k=594
i=276 j=543 k=819
i=278 j=316 k=594
i=278 j=415 k=693
i=281 j=394 k=675
i=281 j=673 k=954
i=283 j=176 k=459
i=283 j=671 k=954
i=284 j=391 k=675
i=286 j=173 k=459
i=291 j=357 k=648
i=291 j=384 k=675
i=291 j=546 k=837
i=291 j=573 k=864
i=293 j=175 k=468
i=293 j=571 k=864
i=294 j=381 k=675
i=295 j=173 k=468
i=296 j=541 k=837
i=297 j=351 k=648
i=314 j=658 k=972
i=316 j=278 k=594
i=317 j=529 k=846
i=317 j=628 k=945
i=318 j=249 k=567
i=318 j=276 k=594
i=318 j=627 k=945
i=318 j=654 k=972
i=319 j=248 k=567
i=319 j=527 k=846
i=324 j=567 k=891
i=324 j=657 k=981
i=327 j=159 k=486
i=327 j=168 k=495
i=327 j=519 k=846
i=327 j=564 k=891
i=327 j=618 k=945
i=327 j=654 k=981
i=328 j=167 k=495
i=328 j=617 k=945
i=329 j=157 k=486
i=329 j=517 k=846
i=341 j=586 k=927
i=342 j=576 k=918
i=346 j=572 k=918
i=346 j=581 k=927
i=348 j=219 k=567
i=349 j=218 k=567
i=351 j=297 k=648
i=352 j=467 k=819
i=354 j=618 k=972
i=354 j=627 k=981
i=357 j=129 k=486
i=357 j=291 k=648
i=357 j=462 k=819
i=357 j=624 k=981
i=358 j=614 k=972
i=359 j=127 k=486
i=362 j=187 k=549
i=362 j=457 k=819
i=364 j=527 k=891
i=367 j=128 k=495
i=367 j=182 k=549
i=367 j=452 k=819
i=367 j=524 k=891
i=368 j=127 k=495
i=372 j=546 k=918
i=376 j=218 k=594
i=376 j=542 k=918
i=378 j=216 k=594
i=381 j=294 k=675
i=381 j=546 k=927
i=382 j=167 k=549
i=382 j=194 k=576
i=384 j=192 k=576
i=384 j=291 k=675
i=386 j=541 k=927
i=387 j=162 k=549
i=391 j=257 k=648
i=391 j=284 k=675
i=392 j=184 k=576
i=394 j=182 k=576
i=394 j=281 k=675
i=397 j=251 k=648
i=415 j=278 k=693
i=418 j=239 k=657
i=418 j=275 k=693
i=419 j=238 k=657
i=428 j=139 k=567
i=429 j=138 k=567
i=438 j=129 k=567
i=438 j=219 k=657
i=439 j=128 k=567
i=439 j=218 k=657
i=452 j=187 k=639
i=452 j=367 k=819
i=457 j=182 k=639
i=457 j=362 k=819
i=462 j=357 k=819
i=467 j=352 k=819
i=475 j=218 k=693
i=478 j=215 k=693
i=482 j=157 k=639
i=482 j=193 k=675
i=483 j=192 k=675
i=487 j=152 k=639
i=492 j=183 k=675
i=493 j=182 k=675
i=514 j=269 k=783
i=517 j=329 k=846
i=519 j=264 k=783
i=519 j=327 k=846
i=524 j=367 k=891
i=527 j=319 k=846
i=527 j=364 k=891
i=529 j=317 k=846
i=541 j=296 k=837
i=541 j=386 k=927
i=542 j=196 k=738
i=542 j=376 k=918
i=543 j=186 k=729
i=543 j=276 k=819
i=546 j=183 k=729
i=546 j=192 k=738
i=546 j=273 k=819
i=546 j=291 k=837
i=546 j=372 k=918
i=546 j=381 k=927
i=564 j=219 k=783
i=564 j=327 k=891
i=567 j=324 k=891
i=569 j=214 k=783
i=571 j=293 k=864
i=572 j=346 k=918
i=573 j=246 k=819
i=573 j=291 k=864
i=576 j=243 k=819
i=576 j=342 k=918
i=581 j=346 k=927
i=583 j=146 k=729
i=586 j=143 k=729
i=586 j=341 k=927
i=591 j=246 k=837
i=591 j=273 k=864
i=592 j=146 k=738
i=593 j=271 k=864
i=596 j=142 k=738
i=596 j=241 k=837
i=614 j=259 k=873
i=614 j=358 k=972
i=617 j=328 k=945
i=618 j=327 k=945
i=618 j=354 k=972
i=619 j=254 k=873
i=624 j=159 k=783
i=624 j=357 k=981
i=627 j=318 k=945
i=627 j=354 k=981
i=628 j=317 k=945
i=629 j=154 k=783
i=634 j=158 k=792
i=634 j=257 k=891
i=637 j=254 k=891
i=638 j=154 k=792
i=642 j=195 k=837
i=643 j=275 k=918
i=645 j=192 k=837
i=645 j=273 k=918
i=654 j=129 k=783
i=654 j=138 k=792
i=654 j=219 k=873
i=654 j=237 k=891
i=654 j=318 k=972
i=654 j=327 k=981
i=657 j=234 k=891
i=657 j=324 k=981
i=658 j=134 k=792
i=658 j=314 k=972
i=659 j=124 k=783
i=659 j=214 k=873
i=671 j=283 k=954
i=673 j=245 k=918
i=673 j=281 k=954
i=675 j=243 k=918
i=681 j=273 k=954
i=683 j=271 k=954
i=692 j=145 k=837
i=695 j=142 k=837
i=715 j=248 k=963
i=716 j=238 k=954
i=718 j=236 k=954
i=718 j=245 k=963
i=725 j=139 k=864
i=729 j=135 k=864
i=735 j=129 k=864
i=735 j=246 k=981
i=736 j=218 k=954
i=736 j=245 k=981
i=738 j=216 k=954
i=739 j=125 k=864
i=745 j=218 k=963
i=745 j=236 k=981
i=746 j=235 k=981
i=748 j=215 k=963
i=752 j=184 k=936
i=754 j=182 k=936
i=762 j=183 k=945
i=763 j=182 k=945
i=782 j=154 k=936
i=782 j=163 k=945
i=783 j=162 k=945
i=784 j=152 k=936
结束时间:1250218940984
程序总共所用时间:94
bayougeng 2009-08-14
  • 打赏
  • 举报
回复

public class Test{

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 123; i < 987; i++) {
// 第二个数字最小是234,最大是864
for (int j = 234; j < 864; j++) {
int result = i + j;
if (isValid(i, j, result)) {
System.out.println(i + " + " + j + " = " + (i + j));
}
}
}
}

private static boolean isValid(int a, int b, int c){
if(c >= 999) {
// 和>=999的时候无效
return false;
}
String num1 = Integer.toString(a);
String num2 = Integer.toString(b);
String num3 = Integer.toString(c);
String numStr = num1 + num2 + num3;
if(numStr.indexOf("0") > 0){
// 有0的时候无效
return false;
}
// 是否有重复
return !isDuplicate(numStr);
}

public static boolean isDuplicate(String numStr){

String[] allNum = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
for (String num:allNum) {
if(numStr.indexOf(num) != numStr.lastIndexOf(num)){
return true;
}
}

return false;
}
}
bigbug9002 2009-08-14
  • 打赏
  • 举报
回复
楼主的算法就是把i,k,和k-i,这三个数的每一位都拿出来,这样共有9位,如果位的数值是x,就设a[x]==1.
如果a[1]~a[9]之和是9说明a[1]~a[9]全设为了1,也就是说1~9全用上了。说明,i,k,k-i这三个数就是答案。
dbsshida 2009-08-14
  • 打赏
  • 举报
回复
路過,學習下
jaehe 2009-08-14
  • 打赏
  • 举报
回复
很好 我也学习啦
tfsict2008 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jaehe 的回复:]
终于自己搞定:
Java codeclass TestSum
{publicstaticvoid main(String[] args)
{int[] a=newint[10];int s,k,n,j;for(int i=123; i<=987; i++)for(k= i+1; k<=987; k++){for(n=1;n<10;n++)
a[n]=0;
j= k- i;
a[i/100]=1;
a[i/10%10]=1;
a[i%10]=1;

a[j/100]=1;
a[j/10%10]=1;
a[j%10]=1;

a[k/100]=1;
a[k/10%10]=1;
a[k%10]=1;for(s=0,n=1; n<10;n++){
s= s+ a[n];
}if(s==9){
System.out.println("i="+ i+"\tj="+ j+"\tk="+ k);
}
}
}
}
[/Quote]

987 换成 500 会快一些
加载更多回复(11)

62,621

社区成员

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

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