奇怪的错误,求教
查看原帖
奇怪的错误,求教
1251631
DuanRui楼主2025/6/20 14:36

第一段代码是可以AC的

#include<bits/stdc++.h>
using namespace std;
const int N = 1e7;
int n;
string x;
int cnt;
int prime[N];
bool st[N]={1,1};
int ans=-1;
void oula()
{
	for(int i=2;i<=N;i++)
	{
		if(st[i]==0)
			prime[cnt++] = i;
		for(int j=0;prime[j]*i<=N;j++)
		{
			st[i*prime[j]] = 1;
			if(i%prime[j]==0)
				break;
		}
	}
}

void dfs(int p)
{	
	if(p==x.size())
	{	
		if(st[stoi(x)]==0)
			ans = stoi(x);
		return;
	}
	if(x[p]=='*')
	{
		for(int i=0;i<=9;i++)
		{	
			if(ans == -1)
			{
				x[p] = '0'+i;
				dfs(p+1);
				x[p] = '*';
			}
		}
	}
	else
	{
		dfs(p+1);
	}
}

int main()
{	
	oula();
	cin>>n;
	for(int i=1;i<=n;i++)
	{	
		ans=-1;
		cin>>x;
		dfs(0);
		cout<<ans<<endl;
	}
	return 0;
}

第二段代码只有task2部分对的,134全错

#include<bits/stdc++.h>
using namespace std;
const int N = 1e7;
int n;
string x;
int cnt;
int prime[N];
bool st[N];
int ans=-1;
void oula()
{
	for(int i=2;i<=N;i++)
	{
		if(st[i]==0)
			prime[cnt++] = i;
		for(int j=0;prime[j]*i<=N;j++)
		{
			st[i*prime[j]] = 1;
			if(i%prime[j]==0)
				break;
		}
	}
}

void dfs(int p)
{	
	if(p==x.size())
	{	
		if(st[stoi(x)]==0)
			ans = stoi(x);
		return;
	}
	if(x[p]=='*')
	{
		for(int i=0;i<=9;i++)
		{	
			if(ans == -1)
			{
				x[p] = '0'+i;
				dfs(p+1);
				x[p] = '*';
			}
		}
	}
	else
	{
		dfs(p+1);
	}
}

int main()
{	
	oula();
	st[0] = 1;
	st[1] = 1;
	cin>>n;
	for(int i=1;i<=n;i++)
	{	
		ans=-1;
		cin>>x;
		dfs(0);
		cout<<ans<<endl;
	}
	return 0;
}

只有欧拉筛st数组的0和1写的方式不同,到底是为什么

2025/6/20 14:36
加载中...