第一题在n个数的数组中,求k个不重复区间满足各区间互相异或(xOR)为0,求k的最大值。
写的程序没有AC,思考整理后再添加!
第二题为求第N个丑数
丑数:只包含因子2,3,5的数就是丑数,1,2,3,4,5,6,8,9,10,12是最前面的10个丑数。
根据定义判断数n是否为丑数的方法可以用求余数的方法,对n依次进行循环求余%2,%3,%5,若最后所得结果为1则为丑数,否则不是丑数,判定方法如下:
判断是否是丑数
int IsUglynum(int n)
{
while (n % 2 == 0)
{
n /= 2;
}
while (n % 3 == 0)
{
n /= 3;
}
while (n % 5 == 0)
{
n /= 5;
}
if (n == 1)
return 1;
else
return 0; //not an ugly number
}
求第N个丑数的代码
#include <iostream>
using namespace std;
判断是否是丑数
int IsUglynum(int n)
{
while (n % 2 == 0)
{
n /= 2;
}
while (n % 3 == 0)
{
n /= 3;
}
while (n % 5 == 0)
{
n /= 5;
}
if (n == 1)
return 1;
else
return 0; //not an ugly number
}
void GetUglyNum(int N)
{ //找到第N个丑数
int i, count = 0;
for (i = 1; count < N; i++)
{
if (IsUglynum(i))
{
count++;
}
}
cout << i - 1 << endl;
}
int main()
{
int N;
cin >> N;
GetUglyNum(N);
return 0;
}