首页 > 代码库 > HDU 1999 不可摸数 (水题)

HDU 1999 不可摸数 (水题)

【题意简述】:中文题

【分析】:想法很简单,因为n的范围仅仅是  2<= n<=1000,所以根据题目描述,我只需要打出一个表即可解决问题,表里存放每一个S(i)的值,如果输入的n能与表中的值相对应,就不是不可摸数,相反便是不可摸数!

不过要注意这里边表的那个上线,我们可以试出来,最后我测试出的结果是5000左右。


#include<iostream>
using namespace std;

int a[5000]={0};

int main()
{
    int n,i,j,m,flag=0;
    a[0]=1;a[1]=1;
    for(i=2;i<5000;i++)
    {
    	a[i]=0;
     	for(j=1;j<=i/2;j++)
      	if(i%j==0)
       	a[i]+=j;
    }
    cin>>n;
    while(n--)
    {
       	cin>>m;
       	for(i=0;i<=1000;i++)         
       	{
   			if(m==a[i])
      		{      
        		flag=1;
          		break;
            }   
        }
        if(flag==0)
        	cout<<"yes"<<endl;
        else
        	cout<<"no"<<endl;
    }
    return 0;
}


HDU 1999 不可摸数 (水题)