这个代码有问题,一直输出-1,有哪位大神可以帮我看看哪里有问题吗?
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define max_n 10005
FILE *fin,*fout;
//数组全部从1开始存
int such_num[max_n],such_num2[max_n];
//bool f[max_n];
unsigned int t;
int x; //定义字符数组
int res,pla; //表示转换为int后的
char da[max_n];
int a[max_n][max_n];
bool fff[max_n];
/*
int conv(int x_1){ //string转换
int k=1; char cc[max_n]; int mm=1;
for(int i=1;;i++){
int res=x_1/k; k*=10;
cc[i]=(res%10)+'0'; //转化为字符数组 cc
if(cc[i]==48) { pla=i; break;} //可疑点
//res=(x_1[i]-48)*k;
//k*=10;
}
for(int i=pla-1;i>0;i--){
da[mm++]=cc[i]; //翻转,da就是最终的结果
}
} */
/*
inline int cal(){
for(int i=0;i<max_n;i++){
such_num[i]=i; //先让他们初始化,生成list
such_num2[i]=i;
}
}
*/
int p(int x){ //判断
memset(da,0,sizeof(da)); //先初始化
//conv(x); //已经分配给da了
int k=1; char cc[max_n]; int mm=1;
for(int i=1;;i++){
int res=x/k; k*=10;
cc[i]=(res%10)+'0'; //转化为字符数组 cc
if(cc[i]==48) { pla=i; break;} //可疑点
//res=(x_1[i]-48)*k;
//k*=10;
}
for(int i=pla-1;i>0;i--){
da[mm++]=cc[i]; //翻转,da就是最终的结果
}
//memset(f,0,sizeof(f)); //初始化f数组为0
for(int i=1;i<=pla;i++){
if(da[i]=='7') ;
fff[x]=1; //自己出局了
break;
}
}
int f(int k){
int f1=0,f2=0;
for(int i=1;i<=pla;i++){
for(int j=1;j<=pla;j++){ //剪枝
p(such_num[i]); p(such_num2[j]);
f1=fff[such_num[i]]; f2=fff[such_num2[j]];
//if( such_num[i]*such_num2[j]==k && !p(such_num[i]) && !p( such_num2[j] && !a[i][j] )) a[i][j]=a[j][i]=1; return k+1;} //可优化
if( such_num[i]*such_num2[j]==k && !f1 && !f2 ) {fprintf(fout,"%d",k+1); } //可优化
}
}
}
int main(){
fin=fopen("number.in","rb");
fout=fopen("number.out","wb");
int ans=0;
memset(fff,0,sizeof(fff));
fscanf(fin,"%u",&t);
for(int i=1;i<=max_n;i++){
such_num[i]=i; //先让他们初始化,生成list
such_num2[i]=i;
}
while(t--){
fscanf(fin,"%d",&x);
p(x);
if(fff[x]==1) { fprintf(fout,"-1");fprintf(fout,"\n"); } //自己说出了die
else if(f(x)){
ans=x+1;
}
else f(x+1);
//memset(da,0,sizeof(da));
//res=0;
}
//string xx;
//xx=(string)x;
fclose(fin);fclose(fout);
return 0;
}