📄 模式识别.c
字号:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int r1[50][50],r2[50][50],R1[51][50],R2[51][50],A[101][51],Y[51][100],
i,j, count,length,breadth,n=1;
void ready(int,int);
void jisuan(int,int);
int judge (int,int);
main()
{ clrscr();
for (i=0;i<51;i++)
A[0][i]=0;
printf("\n");
printf("please input the lenght of r(<=50)!\n");
scanf("%d",&length);
printf("now please input the breadth of r(<=50)!\n");
scanf("%d",&breadth);
printf("now enter r1, from left to right\n");
for (i=1;i<=breadth;i++)
{ for (j=0;j<length;j++)
{
scanf("%d",&r1[i-1][j]);
R1[i][j]=r1[i-1][j];
}
if(i<breadth)
printf("enter next row!\n");
}
for (i=0;i<length;i++)
R1[0][i]=1;
printf("now enter r2, from left to right\n");
for (i=1;i<=breadth;i++)
{ for (j=0;j<length;j++)
{
scanf("%d",&r2[i-1][j]);
R2[i][j]=r2[i-1][j];
}
if(i<breadth)
printf("enter next row!\n");
}
for (i=0;i<length;i++)
R2[0][i]=1;
breadth=breadth+1;
ready(length,breadth);
jisuan(length,breadth);
printf("\n\n\n");
if(judge(length,breadth))
{ printf("the consequence is:\n");
for (i=0;i<breadth;i++)
{ for (j=1;j<=length*2;j++)
{ if(A[j][i]>=0)
{ printf(" ");
printf("%d ",A[j][i]);
}
else
printf("%d ",A[j][i]);
}
printf("\n");
}
printf("\n\n");
printf("at last A is:\n");
for (i=0;i<breadth;i++)
printf("%d ",A[1][i]);
return;
}
else
{
while (!judge(length,breadth))
{ for(i=0;i<breadth;i++)
A[0][i]=A[length*2][i];
jisuan(length,breadth);
if(judge(length,breadth))
{ printf("the consequence is:\n");
for (i=0;i<breadth;i++)
{ for (j=1;j<=length*2;j++)
{ if(A[j][i]>=0)
{ printf(" ");
printf("%d ",A[j][i]);
}
else
printf("%d ",A[j][i]);
}
printf("\n");
}
printf("\n\n");
printf("at last A is:\n");
for (i=0;i<breadth;i++)
printf("%d ",A[1][i]);
return;
}
n++;
if(n>=1000)break;
}
}
printf("have no answer !\n");
return ;
}
void ready(int l,int b)
{
for(j=0;j<l*2;j++)
for (i=0;i<b;i++)
{ if (j<l)
Y[i][j]=R1[i][j];
else
Y[i][j]=R2[i][j-l];
}
}
void jisuan(int l,int b)
{
for(j=0;j<2*l;j++)
{ count=0;
for(i=0;i<b;i++)
count=count+Y[i][j]*A[j][i];
// printf("(");
if(j<l)
{ if (count<=0)
for(i=0;i<b;i++)
A[j+1][i]=A[j][i]+Y[i][j];
else
for(i=0;i<b;i++)
A[j+1][i]=A[j][i];
}
else
{ if (count>=0)
for(i=0;i<b;i++)
A[j+1][i]=A[j][i]-Y[i][j];
else
for(i=0;i<b;i++)
A[j+1][i]=A[j][i];
}
}
}
int judge (int l,int b)
{ j=1;
while (j<2*l)
{ for (i=0;i<b;i++)
if(A[j][i]!=A[j+1][i])
return 0;
j++;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -