【题目描述】
你会得到n个正整数,你需要确定这些正整数中,因数最多的正整数是哪个数?
例如你有4个正整数12,7,6,27,其中12有6个因数(1,2,3,4,6,12);类似地,7,6,27分别有2,4,4个因数。故因数最多的数有6个因数(12),答案为12。
如果有多个数拥有相同的因数,则输出最大的那个数。例如对5个正整数12,7,6,27,28,它们分别有6,2,4,4,6个因数,故因数最多的数有6个因数(12,28),则输出较大的那个数,即28。
【输入格式】
输入共2行:第一行,一个正整数n,表示数的个数;第二行,n个用空格隔开的正整数a1,a2,a3,...,an−1,an,依次表示每个数。
【输出格式】
一行,一个整数,为因数最多的正整数。
【输入输出样例#1】
输入#1
5 12 7 6 27 28
输出#1
28
下面是我写的代码:
#include <iostream>
using namespace std;
int ysgs(int q)//求因数个数的函数
{
int cnt=0;
for(int i=1;i<=q/2;i++)//循环次数是q的一半
{
if(q%i==0)
{
cnt++;
}
}
return cnt*2;//返回两倍的cnt
}
int main()
{
int maxy=0;
int maxn=0;
int a;
cin>>a;
for(int i=1;i<=a;i++)
{
int x;
cin>>x;
if(maxy<ysgs(x)&&x<maxn)
{
maxy=ysgs(x);
maxn=x;
}
if(maxy<=ysgs(x)&&x>maxn)
{
maxy=ysgs(x);
maxn=x;
}
}
cout<<maxn<<endl;
return 0;
}
没登陆的:
#include <iostream>
using namespace std;
int ysgs(int q)//求因数个数的函数
{
int cnt=0;
for(int i=1;i<=q/2;i++)//循环次数是q的一半
{
if(q%i==0)
{
cnt++;
}
}
return cnt*2;//返回两倍的cnt
}
int main()
{
int maxy=0;
int maxn=0;
int a;
cin>>a;
for(int i=1;i<=a;i++)
{
int x;
cin>>x;
if(maxy<ysgs(x)&&x<maxn)
{
maxy=ysgs(x);
maxn=x;
}
if(maxy<=ysgs(x)&&x>maxn)
{
maxy=ysgs(x);
maxn=x;
}
}
cout<<maxn<<endl;
return 0;
}