有人可以帮我看看代码吗?
查看原帖
有人可以帮我看看代码吗?
464158
xzabc123楼主2022/2/15 14:52

这个代码有问题,一直输出-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;
}

2022/2/15 14:52
加载中...