求助,样例过不了
查看原帖
求助,样例过不了
546830
XSean楼主2022/11/10 11:03

代码有些复杂,可以跟我讨论,我的ans的位数都没有8 位,帮忙看看谢谢了

#include<bits/stdc++.h>

using namespace std;
const int N = 15;
int n, cnt/*answer*/;
string date[N];
int d[N][10];
bool ifzs/*if it is zhishu*/(int a){
	for(int i = 2; i * i <= a; i++){
		if(!(a % i)){
			return false;
		}
	}
	return true;
}
int wei(int a){
	int cnt = 0;
	while(a){
		cnt++;
		a/=10;
	}
	return cnt;
}
void dfs(int sum, int order, int step){
	cout << "cnt:" << cnt << " sum:" << sum << " order:" << order << " step:" << step << endl;
	int w = wei(sum);
	if(d[order][8 - step]){
		for(int i = 0; i <= 9; i++){
			if(step == 8){
				if(ifzs(sum + (i * (int)pow(10, w)))){
					cout << "ans:" << sum + (i * (int)pow(10, w)) << endl;
					cnt++;
				}
				return;
			}
			if(((step == 2 || step == 4) && ifzs(sum + (i * (int)pow(10, w))))|| !(step == 2 || step == 4)){
				sum += (i * (int)pow(10, w));
				step++;
				dfs(sum, order, step);
				step--;
				sum -= (i * (int)pow(10, w));
			}else if((step == 2 || step == 4) && !ifzs(sum + (i * (int)pow(10, w)))){
				return;
			}
		}
	}else{
		if(step == 8){
			if(ifzs(sum + ((date[order][8 - step] - '0') * (int)pow(10, w)))){
				cout << "ans:" << sum + ((date[order][8 - step] - '0') * (int)pow(10, w)) << endl;
				cnt++;
			}
			return;
		}
		if(((step == 2 || step == 4) && ifzs(sum + ((date[order][8 - step] - '0') * (int)pow(10, w))))|| !(step == 2 || step == 4)){
			sum += ((date[order][8 - step] - '0') * (int)pow(10, w));
			step++;
			dfs(sum, order, step);
			step--;
			sum -= ((date[order][8 - step] - '0') * (int)pow(10, w));
		}else if((step == 2 || step == 4) && !ifzs(sum + ((date[order][8 - step] - '0') * (int)pow(10, w)))){
			return;
		}
	}
}
int main(){
	/*
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
	*/
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> date[i];
		for(int j = 0; j < 8; j++){
			if(date[i][j] == '-') d[i][j]++;
		}
		dfs(0, i, 1);
		cout << cnt << endl;
		cnt = 0;
	} 
	return 0;
}

2022/11/10 11:03
加载中...