如图,我用样例输入之后算出了7种情况。我在检验中间过程的时候发现了53470327这个数字,而样例解释中并未出现。
我查了一下,也写程序验证了:53470327确实是质数。
但是……
为什么没有这个答案?5347/03/27难道是非法日期?
(搞得我去问同学这个日期是否合法结果被人家当我神经病一样拒绝回答)
我的代码:
经检验,质数生成部分的算法应当是完全正确的。
#include<bits/stdc++.h>
using namespace std;
int t,number;
list<int> prime;
string s;
void getp(){
for(int i=2;i<=10000;i++)
prime.push_back(i);
for(list<int>::iterator i=prime.begin();*i<=100;i++)
for(int j=2;*i*j<=10000;j++)
prime.remove(*i*j);
}
int strint(string c){
int answer(0);
for(int i=0;i<8;i++){
answer*=10;
answer+=c[i]-'0';
}
return answer;
}
bool judge(int x){
for(list<int>::iterator i=prime.begin();i!=prime.end();i++)
if(x%*i==0)
return 0;
if(x==1)
return 0;
return 1;
}
bool datejudge(string c){
int year=(c[0]-'0')*1000+(c[1]-'0')*100+(c[2]-'0')*10+c[3]-'0',month=(c[4]-'0')*10+c[5]-'0',day=(c[6]-'0')*10+c[7]-'0';
switch(c.find('-')){
case string::npos:{
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:{
if(day>31)
return 0;
break;
}
case 4:
case 6:
case 9:
case 11:{
if(day>30)
return 0;
break;
}
case 2:{
if(year%4){
if(day>28)
return 0;
}
else if(year%100){
if(day>29)
return 0;
}
else if(year%400){
if(day>28)
return 0;
}
else{
if(day>29)
return 0;
}
break;
}
}
break;
}
case 7:{
if(month==2&&c[6]>='3')
return 0;
else if(c[6]>='4')
return 0;
}
case 6:{
if((c[4]-'0')*10+c[5]-'0'>12)
return 0;
}
case 5:{
if(c[4]>'1')
return 0;
}
case 4:{
if(year==0)
return 0;
}
}
return 1;
}
void dfs(string now,int pos){
cout<<now<<endl;
while(now[pos]!='-'&&pos<8)
pos++;
if(pos==8){
int a=strint(now);
if(judge(a)){
number++;
cout<<'\t'<<a<<endl;
}
}
else
for(int i='0';i<='9';i++){
now[pos]=i;
if(datejudge(now)){
dfs(now,pos+1);
}
}
}
int main(){
getp();
cin>>t;
for(int i=0;i<t;i++){
number=0;
cin>>s;
if((s[7]-'0')%2&&s[7]!='5'){
dfs(s,0);
cout<<number<<endl;
}
else
cout<<0<<endl;
}
return 0;
}