昨天记错面试题目了,现在的是面试官出的.有谁可做??

heguoxing 2005-08-31 02:46:53
A*2=B,A*3=C,A*4=D,A*5=E,A*6=F,A,B,C,D,E,F分别都是由a,b,c,d,e,f六个数字组成(a,b,c,d,e,f都是大于0小于10的整数),求A。
...全文
590 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
zebra007 2005-09-05
  • 打赏
  • 举报
回复
有啊,呵呵
"A,B,C,D,E,F分别都是由a,b,c,d,e,f六个数字组成"
m7788 2005-09-04
  • 打赏
  • 举报
回复
呵呵,有这个要求吗???
一共6个数字组成6位数
zebra007 2005-09-01
  • 打赏
  • 举报
回复
不是相等,是组成的数字集合相同
比如A=142857
B=285714
他们都是由[1,2,4,5,7,8]组成的,你明明没有检查,
我写的class也就是比你的多了一个这个方法:
boolean sameChar(String,String)
StudyName 2005-09-01
  • 打赏
  • 举报
回复
up
m7788 2005-08-31
  • 打赏
  • 举报
回复
你没有检查A、B、C、D、E、F几个数字的组成是否相同啊

怎么可能会相等,你不会一时头晕吧
ZJQ100 2005-08-31
  • 打赏
  • 举报
回复
老问题了,没新意。
软件公司怎么都绕这种圈子?
zebra007 2005-08-31
  • 打赏
  • 举报
回复
我觉得你的结果虽然是对的
但是代码有点不全面
你没有检查A、B、C、D、E、F几个数字的组成是否相同啊
得出这个结果应该是个巧合
m7788 2005-08-31
  • 打赏
  • 举报
回复
同意zebra007(呼呼)的答案,不过你的难懂了点吧@_@

public class Test {
public static void main(String args[]) {
int a = 0;
final int AMAX = 987654/6;
for(a=102345; a<=AMAX; a++) {
if (check(""+a) ||(check(""+2*a)) || ( check(""+3*a))
|| (check(""+4*a)) || (check(""+5*a)) || (check(""+6*a)))
continue;
System.out.println(a);
}
}

public static boolean check(String s) {
if ( s.indexOf('0') != -1 ) {
return true;
}
int len = s.length();
for(int i=0; i<len-1; i++) {
if (s.indexOf(s.charAt(i), i+1) != -1) {
return true;
}
}
return false;
}
}
fangxifa 2005-08-31
  • 打赏
  • 举报
回复
答案:A=1

不要绕圈,很简单
zebra007 2005-08-31
  • 打赏
  • 举报
回复
也不知道拉兄弟一把,呵呵
下次有好帖子叫兄弟一个
mofeir 2005-08-31
  • 打赏
  • 举报
回复
哈哈,一个月2K分,当然快了
qjyh 2005-08-31
  • 打赏
  • 举报
回复
126984
136984
137465
140327
142857
153846
156427
158630
158730
160793
是正解。
zebra007 2005-08-31
  • 打赏
  • 举报
回复
mofeir(损人专家) 你好啊
三角得的挺快的嘛
:)
zebra007 2005-08-31
  • 打赏
  • 举报
回复
这串数字真是很奇妙
刚才就觉得它眼熟
. .
原来1/7就是0.142857
. .
同样2/7 是0.285714
如此等等....

mofeir 2005-08-31
  • 打赏
  • 举报
回复

public class NumberGuess {

private static int[] number = {0,1,2,3,4,5,6,7,8,9};
private static int[] sixNumber = new int[6];
private static String strA;

public boolean check(int toChecked) {
boolean checkFlag =false;
strA = String.valueOf(toChecked);
if(checkReapeated(strA)) {
return false;
}
for(int i = 2; i < 6 ; i++) {
if(isAppearOnce(toChecked*i,strA)) {
checkFlag = false;
break;
} else {
checkFlag = true;
}
}
return checkFlag;
}

private boolean isAppearOnce(int numberToBeChecked,String sourceString) {
boolean isAppearOnce = false;
String strNumberToBeChecked = String.valueOf(numberToBeChecked);
if(!checkAllCharsAppeared(strNumberToBeChecked, sourceString)) {
isAppearOnce = true;
}
return isAppearOnce;
}

private boolean checkReapeated(String sourceString) {
boolean isRepeated = false;
for(int i = 0; i < sourceString.length(); i++) {
char c = sourceString.charAt(i);
if(sourceString.indexOf(c)!=sourceString.lastIndexOf(c)) {
isRepeated = true;
break;
}
}
return isRepeated;
}

private boolean checkAllCharsAppeared(String strNumberToBeChecked,String sourceString) {
for(int i = 0; i < 6; i++) {
char c = sourceString.charAt(i);
if(strNumberToBeChecked.indexOf(c)<0) {
return false;
}
}
return true;
}

public static void main(String[] args) {
int MAX = 200000;
int MIN = 100000;
NumberGuess guess = new NumberGuess();
for(int i = MIN; i< MAX; i++) {
if(guess.check(i)) {
System.out.println(i);
System.out.println(i*2);
System.out.println(i*3);
System.out.println(i*4);
System.out.println(i*5);
System.out.println(i*6);
break;
}
}
}
}
zebra007 2005-08-31
  • 打赏
  • 举报
回复
上面的主循环,条件可以改一下
A的最高位只可能是1,不然E和F该是7位数了
for(int i=123456;i<=198765;i++){
......................
zebra007 2005-08-31
  • 打赏
  • 举报
回复
楼上的不对吧
public class Find {

public boolean containDup(String s){
for (int i=1; i<=9 ;i++){
if ( s.indexOf(i+48) < s.lastIndexOf(i+48) )
return true;
}
return false;
}

public boolean sameChar(String s1,String s2){
if (s2.length()!=6) return false;
if ( containDup(s2) ) return false;

for (int i=0; i<6 ;i++){
if ( s2.indexOf( s1.charAt(i) ) == -1 )
return false;
}
return true;
}

public void printResult(){
String s="";
for(int i=123456;i<=987654;i++){
s=""+i;
if ( containDup(s) ) continue;
if ( sameChar(s,""+i*2) && sameChar(s,""+i*3) && sameChar(s,""+i*4) && sameChar(s,""+i*5) && sameChar(s,""+i*6) )
System.out.println("A="+i+"\nB="+i*2+"\nC="+i*3+"\nD="+i*4+"\nE="+i*5+"\nF="+i*6);
}
}

public static void main(String[] args) {

Find f=new Find();
f.printResult();

}

}
编码虽然烂了点,不过结果是对的
A=142857
B=285714
C=428571
D=571428
E=714285
F=857142


homesos 2005-08-31
  • 打赏
  • 举报
回复
代码错了,循环中滴判断条件应该为
if (isOK(A) && (isOK(2 * A)) && (isOK(3 * A)) && (isOK(4 * A)) && (isOK(5 * A)) && (isOK (6 * A)))

A自己也是需要判断滴

结果为:

◆126984

◆136984

◆137465

◆140327

◆142857

◆153846

◆156427

◆158630

◆158730

◆160793
homesos 2005-08-31
  • 打赏
  • 举报
回复
for (int A=123456; A<165432; ++A)
{
if ((isOK(2 * A)) && (isOK(3 * A)) && (isOK(4 * A)) && (isOK(5 * A)) && (isOK (6 * A)))
{
System.out.println("◆" + A);
}
}
homesos 2005-08-31
  • 打赏
  • 举报
回复
//用滴方法很笨,不知有谁还有好一点滴办法
//因ABCDEF且是由六个不同数字组成的六位数,因此F最大值为987654,且A不会超过164609
for (int A=123456; A<164598; ++A)
{
if (isOK(2 * A))
{
if (isOK(3 * A))
{
if (isOK(4 * A))
{
if (isOK(5 * A))
{
if (isOK (6 * A))
{
System.out.println("◆" + A);
}
}
}
}
}
}


private boolean isOK(int num)
{
String strNum = "" + num;

if ((strNum.length() == 6)
&& (strNum.charAt(0) != strNum.charAt(1))
&& (strNum.charAt(0) != strNum.charAt(2))
&& (strNum.charAt(0) != strNum.charAt(3))
&& (strNum.charAt(0) != strNum.charAt(4))
&& (strNum.charAt(0) != strNum.charAt(5))
&& (strNum.charAt(1) != strNum.charAt(2))
&& (strNum.charAt(1) != strNum.charAt(3))
&& (strNum.charAt(1) != strNum.charAt(4))
&& (strNum.charAt(1) != strNum.charAt(5))
&& (strNum.charAt(2) != strNum.charAt(3))
&& (strNum.charAt(2) != strNum.charAt(4))
&& (strNum.charAt(2) != strNum.charAt(5))
&& (strNum.charAt(3) != strNum.charAt(4))
&& (strNum.charAt(3) != strNum.charAt(5))
&& (strNum.charAt(4) != strNum.charAt(5)))
{
return true;
}
return false;
}
加载更多回复(9)

62,612

社区成员

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

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