wu


私信TA

用户名:cncfvc

访问量:171019

签 名:

读研狗没有时间刷题了~~

等  级
排  名 2
经  验 29787
参赛次数 8
文章发表 265
年  龄 25
在职情况 学生
学  校 电子科技大学
专  业 通信工程

  自我简介:

写代码 真好玩 ~


这个题目的关键是我们要注意 N位数的最高位可以为1-9

其他的位数只能为1,3,5,7  .

之后再采用递归的方法 找出每个位数的四种情况 加上最高位的9种情况

一一进行特殊素数的判定  


给大家一个小提示  递归可以代替循环次数是个变量的for循环

参考代码:

#include<iostream>
#include<algorithm>
using namespace std;
int a[10];
int s;
int k=0;
int b[1000];
bool prime(int n)
{
	if(n<2)
	return false;
	for(int i=2;i*i<=n;i++)
	{
		if(n%i==0)
		return false;
	}
	return true;
}
void f(int n)
{
	//cout<<"n="<<n<<endl;
	if(n==1)//直到n==1 意味着是最高位
	{
	  for(int i=1;i<=9;i++)//最高位有9种情况
	  {
	  	a[n]=i;//对最高位的每种情况 计算所得数是不是特殊质数
	  	int sum=0,flag=0;
	  	for(int j=1;j<=s;j++)
	  	{
	  	sum=sum*10+a[j];//依次判断数字种减除每一位后是否还是质数
	  	if(!prime(sum))
	  	 {
	  	 	flag=1;
	  	 	break;
		 }
	  	}
	  	if(flag==0)
	  	b[k++]=sum;//将这些特殊质数放入b数组
	  }
	  return;	
	}
	else
	{
		for(int i=1;i<=9;i+=2)
		{
			a[n]=i;//第n位数有1,3,5,7四种情况
			f(n-1);//接着讨论第n-1位数的四种情况.
		}
	}
}
int main()
{
	int N;//特殊质数的位数
	while(cin>>N)
	{
	  s=N;//s为全局变量
	  f(N);		
	  sort(b,b+k);//进行排序后输出
	  for(int i=0;i<k;i++)
	  {
	  	cout<<b[i]<<endl;
	  }
	}
	return 0;
 }


 

0.0分

2 人评分

  评论区

6666666666666666666666666666666666666666666
2020-07-16 05:10:20 | |
楼主,你那解释有些问题,第n位应该有1,3,5,7,9这几种情况
2019-03-08 17:59:10 | |
  • «
  • 1
  • »