首页 新闻 赞助 找找看

怎么才能输出原来的那个数

0
悬赏园豆:15 [待解决问题]

比如说要找到a和b之间约数最多的那个数,然后我把a到b间每个数的约数算出来了,并且知道了最大的约数是多少,那么我该怎么才能输出这个拥有最多约数的数本身呢?

 

//最多约数问题
#include<iostream>
using namespace std;
int div(int n)
{
    int count=0;
    for(int i=1;i<=n;i++)
    {
        if(n%i==0)
            count++;
    }
    return count;
}

int main()
{
    int a,b;
    cin>>a>>b;
    int max=0;
    for(int i=a;i<=b;i++)
    {
        div(i)>max?max=div(i):max=max;
    }
    cout<<max;
    return 0;
}

还有就是在贪婪算法里,

2   5

3  7

1  8

假设上面的数左右一一对应

我们比较完右边的数,怎么把它对应的左边的数输出?

M_Kepler的主页 M_Kepler | 初学一级 | 园豆:177
提问于:2015-03-16 23:02
< >
分享
所有回答(4)
0

你用个数组来存,然后就能够输出来了

刘宏玺 | 园豆:14020 (专家六级) | 2015-03-17 10:15
0

for(int i=a;i<=b;i++)

{

if( div(i)>max )

{

max=div(i);

ans=i;

}

}

ans记录的就是具有约数个数最大的那个数

我非英雄 | 园豆:250 (菜鸟二级) | 2015-03-28 11:21
0

第一个问题其实很简单:

你在main函数里面用到了算法中的“动态规划”求得约数个数的max,同样可以用该方法方便地得到具有最多约数的原始数。

方法是定义一个临时的countMax,然后每次div(i)>max的时候,countMax = i,否则不变。

第二个问题:呵呵,我还没学,学好了,可以交流。

补充:哈哈,今天看了贪婪算法。你的意思是不是最基本的活动安排问题?我想你应该给一个具体的例子说明你的问题。

程序鸳的追求者 | 园豆:202 (菜鸟二级) | 2015-03-29 23:44
0

第一个问题:

像前面有人提到的:

for(int i = a; i <= b; i++){

  int tmp = div(i);

  if(tmp > max){

    max = tmp;
    ans = i;
  }

}

这样ans就是你要的数

 

第二个问题:

最简单的左右两边分别存在两个数组left和right中,用right[i]去比较,

然后得到你要的right[i] 那么left[i]就是对应的左边的那个数

----

如果右边的数顺序会打乱(如排序),那可以定义一个结构体

struct Num{

  int left, right;

}n[MAXN];

用n[i].right去比较,然后最后那个变量对应的n[i].left就是你要的

 

ps.你问的这些问题属于语言基础的部分,多看书多做些实验题吧...

看你这架势,像是要搞ACM的?我只能说如果真想搞ACM的话,路还很长。

yzbyzz | 园豆:202 (菜鸟二级) | 2015-06-13 00:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册