其他分享
首页 > 其他分享> > 2022-6-27

2022-6-27

作者:互联网

如何回形遍历一个矩阵:

 1 #include <stdio.h> 
 2 #include <stdlib.h>
 3 #include <time.h>
 4 #include <string.h>
 5 int m,n;
 6 int main()
 7 {
 8     scanf("%d%d",&m,&n);
 9     int a[m][n],visit[m][n];
10     memset(visit,0,sizeof(visit));
11     for(int i=0;i<m;i++){
12         for(int j=0;j<n;j++){
13             scanf("%d",&a[i][j]);
14         }
15     }
16     int b[m*n];
17     int cnt=0,i=0,j=0;
18     int *p=0;
19     b[0]=a[0][0],visit[0][0]=1;
20     while(cnt<m*n-1){
21         while(j<n-1 && visit[i][j+1]==0)cnt++,p=*(a+i)+j+1,b[cnt]=*p,j++,visit[i][j]=1;
22         while(i<m-1 && visit[i+1][j]==0)cnt++,p=*(a+i+1)+j,b[cnt]=*p,i++,visit[i][j]=1;
23         while(j>0 && visit[i][j-1]==0)cnt++,p=*(a+i)+j-1,b[cnt]=*p,j--,visit[i][j]=1;
24         while(i>0 && visit[i-1][j]==0)cnt++,p=*(a+i-1)+j,b[cnt]=*p,i--,visit[i][j]=1;
25     }
26     for(int i=0;i<m*n;i++){
27         printf("%d ",b[i]);
28     }
29     return 0;
30 }
View Code

矩阵乘法:(三重循环,我这个脑子太好使了)

 1 #include <stdio.h> 
 2 #include <stdlib.h>
 3 #include <time.h>
 4 #define MOD 10000007//为防止溢出,取模 
 5 int a[7][7],b[7][7],c[7][7],x,y,z;//x,y是数组a的行数和列数,数组b的列数和行数 
 6 void createRandomArray(){
 7     x=rand()%5,y=rand()%5,z=rand()%5;
 8     for(int i=0;i<x;i++){
 9         for(int j=0;j<y;j++){
10             a[i][j]=rand()%100;//矩阵中所有元素均在0-100之间 
11         }
12     }
13     for(int i=0;i<y;i++){
14         for(int j=0;j<z;j++){
15             b[i][j]=rand()%100;
16         }
17     }
18 }
19 void calArrayMultiply(){
20     for(int i=0;i<x;i++)
21         for(int j=0;j<z;j++)
22             for(int k=0;k<y;k++)
23                 c[i][j]+=a[i][k]*b[k][j]%MOD;//用三重循环实现乘法 
24 }
25 int main()
26 {
27     srand((unsigned)time(NULL));
28     createRandomArray();
29     calArrayMultiply();
30     puts("以下是第一个矩阵:");
31     for(int i=0;i<x;i++){
32         for(int j=0;j<y;j++){
33             printf("%3d",a[i][j]);
34         }
35         puts("");
36     }
37     puts("以下是第二个矩阵:");
38     for(int i=0;i<y;i++){
39         for(int j=0;j<z;j++){
40             printf("%3d",b[i][j]);
41         }
42         puts("");
43     }
44     puts("以下是结果矩阵:");
45     for(int i=0;i<x;i++){
46         for(int j=0;j<z;j++){
47             printf("%-8d",c[i][j]);
48         }
49         puts("");
50     }
51     return 0;
52 }
View Code

插入(双指针):

 1 //第五题
 2 #include <stdio.h> 
 3 #include <stdlib.h>
 4 #include <time.h>
 5 int main()
 6 {
 7     int a[11];
 8     for(int i=0;i<10;i++)a[i]=rand()%20;
 9     for(int i=0;i<10;i++){
10         int minindex=i;
11         for(int j=i;j<10;j++){
12             if(a[j]<a[minindex]){
13                 minindex=j;
14             }
15         }
16         if(i!=minindex){
17             int t=a[i];
18             a[i]=a[minindex];
19             a[minindex]=t;
20         }
21     }
22     printf("插入前:\n");
23     for(int i=0;i<10;i++){
24         printf("%d ",a[i]);
25         if(i==6)printf("\n");
26     }
27     printf("\n");
28     int x;
29     scanf("%d",&x);
30     int i;
31     for(i=0;i<10;i++){
32         if(x>=a[i]){
33             if(i==9){
34                 printf("在这:%d\n",i);
35                 break;
36             }
37             else{
38                 if(x<=a[i+1])break;
39             }
40         }
41     }
42     int p1,p2=x;
43     for(int j=i+1;j<11;j++){
44         p1=a[j];
45         a[j]=p2;
46         p2=p1;
47     }
48     printf("\n插入后:\n");
49     for(int j=0;j<11;j++){
50             printf("%d ",a[j]);
51             if(j==6)printf("\n");
52     }
53     return 0;
54 }
View Code

矩阵旋转:(用好下标变换)

 1 #include <stdio.h> 
 2 #include <stdlib.h>
 3 #include <string.h> 
 4 #include <time.h>
 5 void zhuan(int n,int angle,int a[][5],int b[][5]){
 6     if(angle==90){
 7         for(int i=0;i<n;i++){
 8             for(int j=0;j<n;j++){
 9                 b[i][j]=a[j][n-i-1];
10             }     
11         }
12     }
13     else if(angle==180){
14         for(int i=0;i<n;i++){
15             for(int j=0;j<n;j++){
16                 b[i][j]=a[n-i-1][n-1-j];
17             }     
18         }
19     }
20     else{
21         for(int i=0;i<n;i++){
22             for(int j=0;j<n;j++){
23                 b[i][j]=a[n-j-1][i];
24             }     
25         }
26     } 
27 }
28 int main()
29 {
30     //int x;
31     //puts("请输入想要的阶数:");
32     //scanf("%d",&x);
33     //x=5;
34     int a[5][5],b[5][5];
35     puts("这是没有旋转的矩阵:");
36     for(int i=0;i<5;i++){
37         for(int j =0;j<5;j++){
38             a[i][j]=rand()%20;
39             printf("%-3d",a[i][j]);
40         }
41         puts("");
42     }
43     puts("请输入要旋转的角度:");
44     int angle;
45     scanf("%d",&angle);
46     puts("");
47     zhuan(5,angle,a,b);
48     puts("这是旋转以后的矩阵:");
49     for(int i=0;i<5;i++){
50         for(int j =0;j<5;j++){
51             printf("%-3d",b[i][j]);
52         }
53         puts("");
54     }
55     return 0;
56 }
View Code

 

标签:cnt,27,int,visit,Code,2022,include,View
来源: https://www.cnblogs.com/-ark/p/16415243.html