问题描述
给出数字N,找出1-N中所有数字i,使得i/2+i/3+i/5得到不同结果,问有多少不同结果。
题目分析
很简单,我也没有采取任何技巧,需要注意的是我们需要把N的数据类型声明为double类型,因为我们需要向下取整,只有对double有效。声明一个大的数组,将结果作为索引,将对应位置的值改为1。
如果该索引对应的值本身就是1我们就跳过;如果不是1,则说明这个结果还没有出现,我们将不同值的数目+1.
代码
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
const int maxmum = 100010;
vector<int>count(maxmum,0);
int main()
{
double n;
cin>>n;
int con = 0;
for(double i = 1;i <= n;i++)
{
if(count[floor(i/2)+floor(i/3)+floor(i/5)]==0)
{
con++;
count[floor(i/2)+floor(i/3)+floor(i/5)]++;
}
}
cout<<con;
return 0;
}
答题用时4min
Q87——finish√