一维
需掌握的几种排序
1.选择排序
#include<stdio.h> int main() { int n,a[10],max,t; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=0;i<n;i++) { max=i; for(int j=i;j<n;j++) { if(a[j]>a[max]) { max=j; } }t=a[max]; a[max]=a[i]; a[i]=t; }for(int k=0;k<n;k++) { printf("%d ",a[k]); }return 0; }
2.冒泡排序
#include<stdio.h> int main() { int n,a[10],max,t; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=0;i<n-1;i++) { for(int j=0;j<n-i-1;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } }for(int k=0;k<n;k++) { printf("%d ",a[k]); }return 0; }
3.二分查找
#include<stdio.h> int main() { int n,a[10],mid,left,right,x; scanf("%d %d",&n,&x); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } left=0;right=n-1; while(left<=right) { mid=(left+right)/2;//mid要放在循环里 if(a[mid]==x) { printf("yes"); break; }if(x>a[mid]) { left=mid+1; }if(x<a[mid]) { right=mid-1; } } return 0; }
投票运用
#include<stdio.h> int main() { int a[1000]; int x; int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d ",&x); a[x]++; } for(int j=1;j<=8;j++) { printf("%4d%4d\n",j,a[j]); }return 0; }
二维
杨辉三角
推导过程(懒得打字)
代码实现
#include<stdio.h> int main() { int n,a[11][11]; scanf("%d",&n); for(int m=0;m<n;m++) { a[m][0]=1; a[m][m]=1; } for(int i=2;i<n;i++) { for(int k=1;k<i;k++) { a[i][k]=a[i-1][k-1]+a[i-1][k]; } }for(int i=0;i<n;i++) { for(int j=0;j<n-i;j++) { printf(" "); } for(int c=0;c<=i;c++) { printf("%4d",a[i][c]); } printf("\n"); }return 0; }
结果
last:顺时针螺旋方阵 (逆时针应该差不多
推导过程(从b站学的,懒得打字用写的)
代码实现
#include<stdio.h>
int main() { int n,m=1,j,k,l,b,i; scanf("%d",&n); int a[10][10]={0}; if(n%2!=0) { a[n/2][n/2]=n*n; } for(i=0;i<n/2;i++) { for(j=i;j<n-i-1;j++)//向右 { a[i][j]=m++; } for(k=i;k<n-i-1;k++)//向下 { a[k][n-i-1]=m++; }for(l=n-i-1;l>i;l--)//向左 { a[n-i-1][l]=m++; }for(b=n-i-1;b>i;b--)//向上 { a[b][i]=m++; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%3d",a[i][j]); } printf("\n"); }return 0; }
结果
先这样吧!
bye