数组总结(含杨辉三角,螺旋矩阵详解)

一维

需掌握的几种排序

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

 

 

posted @ 2021-11-06 00:25  MIKI`(宋曼琦)  阅读(68)  评论(0编辑  收藏  举报