问灌佬多( 普及/提高−)
  • 板块灌水区
  • 楼主Alananan
  • 当前回复3
  • 已保存回复4
  • 发布时间2024/7/27 15:22
  • 上次更新2024/7/27 15:58:15
查看原帖
问灌佬多( 普及/提高−)
1112027
Alananan楼主2024/7/27 15:22
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<vector>
#include<cstdio>
using namespace std;
int n,sum = 1;
bool p[50] = {1},v[50];
int a[20];
void pr(){//找质数 
	for(int i = 2;i <= 45;i++){
		for(int j = 2;j * i <= 45;j++){
			p[j * i] = 0;
		}
	}
}
void dfs(int s){
	if(s == n && p[a[s - 1] + 1]){//所有数都被用过了并且最后一个数加一是素数 
		cout<<'1';
		for(int i = 1;i < n;i++) cout<<' '<<a[i];
		cout<<endl;
		return;
	}
	for(int i = 2;i <= n;i++){
		if(!v[i] && p[a[s-1] + i]){//当这个数没有被用过并且它与上一个数的和是素数 
			v[i] = 1;
			a[s] = i;
			dfs(s + 1);
			v[i] = 0;
		}
	}
	
}
int main(){
	pr();//找质数 
	while(cin>>n){//输入 
		printf("Case %d:\n",sum);
		sum++;
		dfs(1);
	}
	return 0;
}

输入后只输出Case i: 求助

原题

2024/7/27 15:22
加载中...