华师一附中OI组
标题:
1000以内约数最多的数是哪个
[打印本页]
作者:
admin
时间:
2020-2-11 11:28
标题:
1000以内约数最多的数是哪个
这是一个简单的统计题,一个很简单的思路是求出1-1000内每个数的约数个数,然后求出最大值
求约数的个数可以类似开关灯问题,只是不去设置灯的开关状态而是记录开关了多少次。
#include <iostream>
using namespace std;
const int mn=1000;
bool a[mn+5];
int i,j;
int main()
{
for (i=1; i<=mn; i++) a[i]=0; ///预设每个数的约数为0
for (i=1; i<=mn; i++)
{
s=0; ///从0开始
for (j=1; j<=mn; j++)
if (%j==0) s++; ///统计约数个数
a[i]=s;///存起来
}
maxs=-1;
for (i=1; i<=mn; i++) if (a[i]>maxs) maxs=s;///找最大值
cout<<s;
return 0;
}
复制代码
作者:
admin
时间:
2020-2-11 11:34
楼上那样做是在是太浪费了,我们完全没有必要记录下所有数的约数个数,其实可以一边求出约数的个数,就一边就和当前的最大值比较,大就保留,小或等就舍弃。
#include <iostream>
using namespace std;
const int mn=1000;
int i,j,s,maxs;
int main()
{
maxs=-1;///maxs赋初值
for (i=1; i<=1000; i++)
{
s=0; ///统计赋初值
for (j=1; j<=1000; j++) if (i%j==0) s++; ///统计个数
if (s>maxs) maxs=s;///擂台比较
}
cout<<maxs;
return 0;
}
复制代码
作者:
admin
时间:
2020-2-11 11:38
要是既想要求出最多约数的个数,又要求出这个数的话,就可以加一个标记变量,在记录maxs的时候同时记录maxi表示这个数,比较的时候只需要比较maxs和s但更新的时候不仅要更新maxs也需要更新maxi
#include <iostream>
using namespace std;
const int mn=1000;
int i,j,s,maxs,maxi;
int main()
{
maxs=-1;///maxs赋初值 maxi不用 想想为什么
for (i=1; i<=1000; i++)
{
s=0; ///统计赋初值
for (j=1; j<=1000; j++) if (i%j==0) s++; ///统计个数
if (s>maxs) {maxs=s;maxi=i;}///更新两个
}
cout<<maxs<<' '<<maxi;
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2