其实我是在洛谷上交的,,,听说这似乎是一道ACM的题???
题目的大致是说给你一个0~1的十进制小数;你判断它转换成三进制小数后小数点后有没有含1,有的话输出NON-MEMBER,不含有的话输出MEMBER。似乎也不是很难的样子……
用set来做,以下是c++代码。
#include<iostream>
#include<set>
#include<cstdio>
using namespace std;
bool b[1000000];
int main()
{
double d;
bool cantor;
int n,i;
while ( scanf("%lf",&d)==1 )
{
memset(b,0,sizeof(b));
cantor = 1;
n = (int)( d*1000000+0.5 );
if (n<0 || n>1000000)
cantor = 0;
else if (n==0 || n==1000000)
cantor = 1;
else
while (1)
{
n *= 3;
i = n/1000000;
n -= i*1000000;
if(i==1)
{
cantor = 0;
break;
}
if(b[n])
{
cantor = 1;
break;
}
else
b[n] = 1;
}
if (cantor)
cout<<"MEMBER"<<endl;
else
cout<<"NON-MEMBER"<<endl;
}
return 0;
}