还是最后三个tle,这题不能用递归吗?
查看原帖
还是最后三个tle,这题不能用递归吗?
5577
hxy147楼主2020/10/6 16:08
#include<stdio.h>
#include<stdlib.h>	
int c[10000]={0},m,len=0,a,b,flag,s,k;
int pd(int x)
{
	int f,l;		
	f=1;
	for(l=2;l*l<=x;l++)
	{
		if(x%l==0)
		{
			f=0;
			break;
		} 
	}
	if(f==1)
	return 1;
	else
	return 0;
}
void hw(int n,int m,int t)
{
	int e;
	if(n>=1)
	{
		for(e=0;e<=9;e++)
		{
			m++;
			c[m]=e;
			hw(n-1,m,t);
			if(n==1)
			{
				len=m;
				if(t==1)
				{
					s=0;
					for(k=1;k<=len-1;k++)
					s=s*10+c[k];
					s=s*10+c[len];
					for(k=len-1;k>=1;k--)
					s=s*10+c[k];
					if(s<=b)
					{
						if(pd(s)==1)
						printf("%d\n",s);
					}
					else
					{
						flag=-1;	
					}
				}
				if(t==2)
				{
					s=0;
					for(k=1;k<=len;k++)
					s=s*10+c[k];
					for(k=len;k>=1;k--)
					s=s*10+c[k];
					if(s<=b)
					{
						if(pd(s)==1)
						printf("%d\n",s);
					}
					else
					{
						flag=-1;	
					}
				}
			
			}	
			m--;
		}
	}
}
int main()
{
 	int i,j;
	scanf("%d %d",&a,&b);
	flag=0;
	for(i=1;i<=9;i++)
	{
		if(flag==-1)
		break;
		if(i==1)
		{
			for(j=5;j<=10;j=j+2)
			{
				if(j>b)
				{
					flag=-1;
					break;
				}
				else
				printf("%d\n",j);
			}
		}
		if(i%2==0)
		{
			for(j=1;j<=9;j=j+2)
			{
				m=1;
				c[m]=j;
				hw(i/2-1,m,2);
				if(i==2)
				{
					s=0;
					len=1;
					s=s*10+c[len];
					s=s*10+c[len];
					if(s<=b)
					{
						if(pd(s)==1)
						printf("%d\n",s);
					}
					else
					{
						flag=-1;	
						break;
					}
				}
			}
		}
		if(i%2!=0&&i>1)
		{
			
			for(j=1;j<=9;j=j+2)
			{
				m=1;
				c[m]=j;
				hw(i/2,m,1);
			}
		}
	}
	system("pause");
	return 0;
} 
2020/10/6 16:08
加载中...