请教2个面试 算法题

heihengheng 2010-04-29 11:25:59
题目 1 求三位数中满足 abc = ab + bc + c 的所有数。。。 例如 153 = 15 + 32 + 3 (当然这个不等于,我只是打个比方呵呵)
题目 2 求4位整数中因子数最多的一个数。 例如 6的因子有 2,3
...全文
498 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2010-05-04
  • 打赏
  • 举报
回复
题目 1 求三位数中满足 abc = ab + bc + c 的所有数。。。 例如 153 = 15 + 32 + 3 (当然这个不等于,我只是打个比方呵呵)

题目 2 求4位整数中因子数最多的一个数。 例如 6的因子有 2,3


这两个题目类似:
先暴力算几个,在观察规律,用数学归纳法证明之。
hzc191025 2010-05-04
  • 打赏
  • 举报
回复
按照题目的描述,可推出:
a*100 + b*10 + c = a*10 + b + b*10 + c + c


===>

90a = b + c

所以题目出错了
  • 打赏
  • 举报
回复
题目 2 求4位整数中因子数最多的一个数。 例如 6的因子有 2,3
2*3*5*7*11…… 直到要大于10000就可以了,即为所求
heihengheng 2010-05-02
  • 打赏
  • 举报
回复
太牛了
[Quote=引用 8 楼 michael122 的回复:]

第二题不简单,具体实现见: http://topic.csdn.net/u/20100415/13/55d7447a-e178-4f2b-b407-1e7dd14b2af8.html

第一题确实错了,可能是abc = ab + bc + ca?
[/Quote]
heihengheng 2010-05-02
  • 打赏
  • 举报
回复
NB!!!!!!!1
knate 2010-04-30
  • 打赏
  • 举报
回复
不好意思.似乎这个答案是错的.
http://zh.wikipedia.org/zh-cn/%E5%A5%87%E7%95%B0%E6%95%B8_%28%E6%95%B8%E8%AB%96%29
[Quote=引用 17 楼 lazy_p 的回复:]

引用 10 楼 knate 的回复:
第二题
上网查一下什么叫丰数就可以了

没查到什么丰数?求内幕!
[/Quote]
宅男小何 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 knate 的回复:]
第二题
上网查一下什么叫丰数就可以了
[/Quote]
没查到什么丰数?求内幕!
yysdsyl 2010-04-30
  • 打赏
  • 举报
回复
正解
[Quote=引用 9 楼 himetale 的回复:]

设该数为
2^a*3^b*5^c*7*d

a>b>c>d;
2^a*3^b*5^c*7*d<9999

找最大的(a+1)(b+1)(c+1)(d+1)
线性规划估计是不能用,会转标准型的麻烦教教我。。
遍历abcd吧
[/Quote]
michael122 2010-04-30
  • 打赏
  • 举报
回复
第2个问题看这里 http://topic.csdn.net/u/20100415/13/55d7447a-e178-4f2b-b407-1e7dd14b2af8.html
ytmsdy 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 heihengheng 的回复:]
朋友,。你的解法是对的,。但是这是穷举法,效率太低。这样写肯定不行

引用 6 楼 inflexible_lin 的回复:

第二个题:
int m=0,n=0;
for(i=1000;i<9999;i++)
{
k=0;
for(j=2;j<i;j++)
if(i%j==0)
k++;
if(m<k)
{
m=k;
n=i;
}
}
[/Quote]

对于这个问题的数据范围来说,用暴力搜索是最简便的。。。
因为你只有3个数,对这3个数进行循环就行了啊。。。
最多才计算1000次。。
luozhangwen 2010-04-30
  • 打赏
  • 举报
回复
专业接分
heihengheng 2010-04-30
  • 打赏
  • 举报
回复
朋友,。你的解法是对的,。但是这是穷举法,效率太低。这样写肯定不行

[Quote=引用 6 楼 inflexible_lin 的回复:]

第二个题:
int m=0,n=0;
for(i=1000;i<9999;i++)
{
k=0;
for(j=2;j<i;j++)
if(i%j==0)
k++;
if(m<k)
{
m=k;
n=i;
}
}
[/Quote]
heihengheng 2010-04-30
  • 打赏
  • 举报
回复
不好意思 可能出错了。不过大概就是这个意思!~~
jvinceccai 2010-04-30
  • 打赏
  • 举报
回复
List<Integer> list =new ArrayList<Integer>;
for(int i=100;i<1000;i++)
{
string stri= i.tostring();
int num1=Iteger.parse(stri.substring前两位);
int num2=Iteger.parse(stri.substring后两位);
int num3=Iteger.parse(stri.substring最后一位);
if(i==num1+num2+num3)
list.add(i);
}
第一题大概就这样,我没写全
shixitong 2010-04-30
  • 打赏
  • 举报
回复
package com.my.test;

import java.util.ArrayList;
import java.util.List;

public class ArthTest {

//==求三位数中满足 abc = ab + bc + c 的所有数。。。==//
private int hundred;//百位数
private int ten;//十位数
private int unit;//个位数


public int equationOfOne(int num){
hundred=num/100;
ten=(num%100)/10;
unit=num%10;
if(num==hundred*ten+ten*unit+unit){
return num;
}
return -1;

}

public void print(){
int n=0;
List<Integer> list = new ArrayList<Integer>();
for(int num=100;num<1000;num++){
int value = equationOfOne(num);
if(value != -1){
list.add(value);
}
}
System.out.println("所有符合条件的数位");
for(int j=0;j<list.size();j++){

System.out.println(list.get(j));
}
}

//==求4位整数中因子数最多的一个数。 例如 6的因子有 2,3==//
/**
* 获得num所有的因子数
* @param num
* @return
*/
public int getFactorsOfNum(int num){
int sumOfFactors=0;
for(int i=1;i<=num;i++){
if(num%i==0){
sumOfFactors++;
}
}
return sumOfFactors;
}

/**
* 获得四位正整数(负整数同理)的因子数的集合
* @return
*/
public List getFactors(){
List<Integer> array = new ArrayList<Integer>();
for(int num=1000;num<10000;num++){
array.add(getFactorsOfNum(num));
}
return array;
}

/**
* 获得因子数最多的那个四位数
* @return
*/
public int[] getMax(){
int[] maxAndThisNum = new int[2];
List<Integer> list = getFactors();
for(int i=0;i<list.size()-1;i++){
if(list.get(i)>list.get(i+1)){
maxAndThisNum[0]=list.get(i);
maxAndThisNum[1]=i;
list.set(i+1, list.get(i));
list.set(i, list.get(i+1));
}
}
return maxAndThisNum;
}


public static void main(String args[]){

ArthTest atest= new ArthTest();
atest.print();
int maxAndThisNum[] = atest.getMax();
System.out.println("四位整数中含有因子最多的数为:"+(maxAndThisNum[1]+1000)+"因子数为:"+maxAndThisNum[0]);
}
}
bupt_xiaoz 2010-04-30
  • 打赏
  • 举报
回复
不可能存在题目1那种情况
初级coder 2010-04-30
  • 打赏
  • 举报
回复
//factor.cpp 求四位数中质因数最多的数,并输出质因数
#include<iostream>
using namespace std;
int main()
{
int i,j,n;
int factor,max=0,flag;
for(i=1001;i<10000;i++)
{ n=i; //初始化
factor=0;
for(j=2;j<=n;j++) //n为下一个最大的因数,作用是加速循环
{ if(n%j==0)
factor++;
while(n%j==0) //去掉重复因子 得到下一个最大因子n
{
n/=j;
}

}
if(max<factor)
{
max=factor;
flag=i; //标记要求的数
}

}
cout<<flag<<" have "<<max<<" factors :";
for(i=2;i<=flag;i++)
{ if( flag%i==0)
cout<<i<<' ';
while(flag%i==0)
{
flag/=i;
}


}
cout<<endl;


return 0;
}
knate 2010-04-30
  • 打赏
  • 举报
回复
第二题
上网查一下什么叫丰数就可以了
heihengheng 2010-04-30
  • 打赏
  • 举报
回复
悲剧 不要用暴力破解法啊
初级coder 2010-04-30
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
int main()
{
int i,sum,n;
for(i=100;i<300;i++)
{
n=i/10;
sum=i/10+(i-n*10)+i%10;
if(i==sum)
cout<<i<<"="<<n<<'+'<<(i-n*10)<<'+'<<i%10<<endl;
}
return 0;
}
没有这样的数,数学推理一下可以知道的肯定是在300以内
加载更多回复(11)

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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