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