C语言循环嵌套数量过大
能否让它正常循行
#include<stdio.h>
#include<math.h>
double x[942][1412]={0};
double score[942][1412];
int top[942][1412];
double list[942][1412];
int result[926][11]={0};
double sim[942][942];
double product(double a[],double b[],int n){
double result=0;
for(int i=0;i<n;i++){
result+=a[i]*b[i];
}
return result;
}
double length(double a[],int n){
double result=0;
for(int i=0;i<n;i++){
result+=a[i]*a[i];
}
return sqrt(result);
}
double similar(double a[],double b[],int n){
return 1.0*product(a,b,n)/(length(a,n)*length(b,n));
}
int main(){
int i,j,m,n,c;
int t,k,q=0;
FILE *p=fopen("training.txt","r");
while(fscanf(p,"%d %d %d",&i,&j,&c)!=EOF){
x[i-1][j-1]=1;
}
fclose(p);//将数据转化为二维数组存储
for(i=0;i<942;i++){
for(j=0;j<942;j++){
sim[i][j]=similar(x[i],x[j],1412);//通过向量方法计算相似度
}
}
for(i=0;i<942;i++){
for(j=0;j<1412;j++){
for(m=0;m<942;m++){
score[i][j]=score[i][j]+sim[i][m]*x[m][j];//加权计算得分
}
}
}//计算每个用户对于每件商品可能的喜爱程度
for(i=0;i<942;i++){
for(j=0;j<1412;j++){
top[i][j]=j+1;
}
}
for(i=0;i<942;i++){
for(j=0;j<1412;j++){
list[i][j]=score[i][j];
}
}
for(i=0;i<942;i++){
for(j=1411;j>=0;j--){
for(m=0;m<j;m++){
if(list[i][m]<list[i][j]){
n=list[i][j];
list[i][j]=list[i][m];
list[i][m]=n;
n=top[i][j];
top[i][j]=top[i][m];
top[i][m]=n;
}
}
}
}//按照分数对用户可能喜欢的商品进行排序
FILE *fpRead=fopen("test.txt","r");
if(fpRead==NULL)
{
return 0;
}
for(i=0;i<926;i++)
{
fscanf(fpRead,"%d ",&result[i][0]);
}//读取test数据
fclose(fpRead);
for(i=0;i<926;i++){
for(j=1;j<11;j++){
result[i][j]=top[result[i][0]][j-1];
}
}//在数组中填入top10商品
FILE *fpWrite=fopen("202200271019_result.txt","w");
if(fpWrite==NULL){
return 0;
}
for(i=0;i<926;i++){
for(j=0;j<11;j++){
fprintf(fpWrite,"%d ",result[i][j]);
}
fprintf(fpWrite,"\n");
}//写入top10推荐
fclose(fpWrite);
return 0;
}
你这个没有什么循环过多的问题,但是可能有死循环,你调试下
不知道你这个问题是否已经解决, 如果还没有解决的话: