设 x,y 为非负整数,试计算集合 M={(2^x)*(3^y),x>=0,y>=0} 的元素不大于指定整数 n 的个数,并求这些元素从小到大排序的第 m 项。
多组输入,每组一行,输入 n 和 m,n 和 m 之间用一个空格分开
对于每组输入,输出数列中不大于 n 的项数以及第 m 项的值,这两个数占两行。
#include<stdio.h>
int main()
{
int m,n,i,j,a,b,c,d,t,s1[100001],s2[100001];
while(~scanf("%d %d",&n,&m))
{
if(m<=0||m>n)
{
break;
}
a=1;
b=1;
i=1;
s1[0]=1;
s2[1]=1;
while(!0)
{
c=0;
for(j=0;j<i;j++)
{
d=s1[i-1]+j;
if(s2[d]*2<=n&&s2[d]>0)
{
a++;
s2[a]=s2[d]2;
c=1;
if(j==0)
{
s1[i]=a;
}
}
else
break;
}
b=b3;
if(b<=n&&b>0)
{
a++;
s2[a]=b;
}
if(c==0)
break;
i++;
}
for(i=1;i<a;i++)
{
for(j=i+1;j<=a;j++)
{
if(s2[i]>s2[j])
{
t=s2[i];
s2[i]=s2[j];
s2[j]=t;
}
}
}
if(m>a)
{
break;
}
printf("%d\n",a);
printf("%d\n",s2[m]);
}
return 0;
}
测试是对的,提交一直是WA,请问问题在哪?