• C语言(数组,DEVFORGE学编程社区)


    1、右下角

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 int main()
     4 {
     5     int n;
     6     scanf("%d",&n);
     7     
     8     int *arr = (int*)malloc(sizeof(int)*n*n); //一维模拟二维数组
     9     
    10     for(int a=0; a<n*n; ++a)
    11     {
    12         scanf("%d",&arr[a]);
    13     }
    14     
    15     for(int i=0; i<n; ++i)
    16     {
    17         for(int j=0; j<n-i-1; ++j)//左上角输出空格
    18         {
    19             printf("  ");
    20         }
    21         for(int k=n-i-1; k<n; ++k)//右下角输出数组元素
    22         {
    23             printf("%d ",arr[i*n+k]);//模拟
    24         }
    25         printf("
    ");
    26     }
    27 
    28     return 0;
    29 }

    2、插入排序

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 
     4 void InsertSort(int *arr, int m)
     5 {
     6     int i;
     7     for(i=1; i<m; ++i){/*第0个元素有序,从第1个元素向右无序*/
     8         int j=i-1,key=arr[i];/*保存第i个元素,左边的元素i-1*/
     9         while(j>=0 && key>arr[j]){/*保存的元素key与之前的元素从右向左逐个比较*/
    10             arr[j+1]=arr[j];/*移动(向后赋值)*/
    11             j--;
    12         }
    13         arr[j+1]=key;/*j--退出,恢复正确值j+1*/
    14     }
    15 }
    16 
    17 int main()
    18 {
    19     int n;
    20     scanf("%d",&n);
    21     
    22     int *arr = (int*)malloc(sizeof(int)*n); 
    23     
    24     for(int i=0; i<n; ++i)
    25     {
    26         scanf("%d",&arr[i]);
    27     }
    28     
    29     int s,m;
    30     scanf("%d%d",&s,&m);
    31     
    32     InsertSort(&arr[s],m);
    33     
    34     for(int j=0; j<n; ++j)
    35     {
    36         printf("%d ",arr[j]);
    37     }
    38     
    39     return 0;
    40 }

    3、边缘与内心的差

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 int main()
     4 {
     5     int n,m,s1=0,s2=0;
     6     scanf("%d%d",&n,&m);
     7     
     8     int *arr = (int*)malloc(sizeof(int)*n*m); //一维模拟二维数组
     9     
    10     for(int i=0; i<n*m; ++i)
    11     {
    12         scanf("%d",&arr[i]);
    13     } 
    14     
    15     for(int i=0; i<n; ++i)
    16     {
    17         for(int j=0; j<m; ++j)
    18         {
    19             if(i==0||i==n-1 || (i!=0&&i!=n-1&&(j==0||j==m-1)))
    20             {
    21                 s1 += arr[i*m+j]; //一行m个
    22             }
    23             else
    24             {
    25                 s2 += arr[i*m+j];
    26             } 
    27         }      
    28     }
    29     
    30     printf("%d ",s1-s2);
    31     
    32     return 0;
    33 }

    4、左下角

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 int main()
     4 {
     5     int n;
     6     scanf("%d",&n);
     7     
     8     int *arr = (int*)malloc(sizeof(int)*n*n); //一维模拟二维数组
     9     
    10     for(int a=0; a<n*n; ++a)
    11     {
    12         scanf("%d",&arr[a]);
    13     }
    14     
    15     for(int i=0; i<n; ++i)
    16     {
    17         for(int j=0; j<i+1; ++j)//输出数组元素
    18         {
    19              printf("%d ",arr[i*n+j]);//模拟
    20         }       
    21         printf("
    ");
    22     }
    23     return 0;
    24 }

     5、快速排序

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 
     4 void QuickSort(int *a, int left, int right)
     5 {
     6     int i,j,t;
     7     /*左指针left指向数组头 右指针right指向数组尾*/
     8     if(left<right){
     9         i=left,j=right,t=a[left];/*左右指针 提取基数*/
    10         while(i<j){
    11             while(i<j && a[j]<=t) j--;/*右指针左移 指向小于基数的数据停止*/
    12                 a[i]=a[j]; /*补空位*/
    13             while(i<j && a[i]>=t) i++;/*左指针右移 指向大于基数的数据停止*/
    14                 a[j]=a[i]; /*补空位*/
    15         }
    16         a[j]=t;/*右指针指向数据即基数应在的位置 基数定位*/
    17         QuickSort(a,left,j-1);/*左边数据递归*/
    18         QuickSort(a,j+1,right);/*右边数据递归*/
    19     }
    20 }
    21 
    22 int main()
    23 {
    24     int n;
    25     scanf("%d",&n);
    26     
    27     int *arr = (int*)malloc(sizeof(int)*n); 
    28     
    29     for(int i=0; i<n; ++i)
    30     {
    31         scanf("%d",&arr[i]);
    32     }
    33     
    34     int s,m;
    35     scanf("%d%d",&s,&m);
    36     
    37     QuickSort(arr,s,m); //左s,右m
    38     
    39     for(int j=0; j<n; ++j)
    40     {
    41         printf("%d ",arr[j]);
    42     }
    43     
    44     return 0;
    45 }

     6、二分查找

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define N 100
     4 int BinarySearch ( int *arr, int n, int m);
     5 int main()
     6 {
     7     int n;
     8     scanf("%d",&n);
     9     int arr[N] = {0};
    10     for(int i=0; i<n; ++i){
    11         scanf("%d",&arr[i]);
    12     }
    13     int m;
    14     scanf("%d",&m);
    15     int ret = BinarySearch(arr,n,m);
    16     if(ret!=-1)
    17         printf("%d",ret);
    18     else 
    19         printf("null");
    20     return 0;
    21 }
    22 int BinarySearch ( int *arr, int n, int m)
    23 {
    24     int left = 0, right = n-1, mid;
    25     
    26     while ( left <= right )
    27     {
    28         mid = (left+right)/2; /*计算中间元素坐标*/
    29         if( m <arr[mid]) right = mid-1; /*调整右边界*/
    30         else if( m>arr[mid]) left = mid+1; /*调整左边界*/
    31         else return mid; /*查找成功,返回数据元素的下标*/
    32     }
    33     return -1; /*查找不成功,返回-1*/
    34 }

    7、一维数组加法

     1 #include<stdio.h>
     2 /*不考虑进位可以过OJ*/
     3 int main()
     4 {
     5     int A[100], B[100], C[100];
     6     int i, n;
     7     scanf("%d", &n);
     8     for(i=0;i<n;i++)
     9     {
    10         scanf("%d", &A[i]);
    11     }
    12     for(i=0;i<n;i++)
    13     {
    14         scanf("%d", &B[i]);
    15     }
    16     for(i=0;i<n;i++)
    17     {
    18         C[i]=A[i]+B[i];
    19         printf("%d ", C[i]);
    20     }
    21     printf("
    ");
    22     return 0;
    23 }
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define N 100
     4 
     5 int main()
     6 {
     7     int n;
     8     scanf("%d",&n);
     9     int a[N] = {0}, b[N] = {0}, c[N] = {0};
    10     /* 两个数组赋值 */
    11     for(int i=0; i<n; ++i){/*数字的最高位在数组的0下标*/
    12         scanf("%d",&a[i]);
    13     }
    14     for(int j=0; j<n; ++j){
    15         scanf("%d",&b[j]);
    16     }
    17     /* 两个数组相加到数组c */
    18     int carry = 0, index = 0;
    19     for(int j=n-1; j>=0; j--)/*从数字的最低位相加*/
    20     {
    21         int temp = a[j] + b[j] + carry;
    22         c[index++] = temp%10;
    23         carry = temp/10;/**< 进位 */
    24     }
    25     if(carry > 0)/*判断是否进位*/
    26     {
    27         c[index++] = carry;
    28     }
    29     /* 打印相加结果 */
    30     for(int k=index-1; k>=0; --k)
    31     {
    32         printf("%d ",c[k]);
    33     }
    34     return 0;
    35 }

    8、平均值函数

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define N 100
     4 double avg(int a[],int s, int e);
     5 int main()
     6 {
     7     int n;
     8     scanf("%d",&n);
     9     int a[N] = {0};
    10     for(int i=0; i<n; ++i){
    11         scanf("%d",&a[i]);
    12     }
    13     int s,e;
    14     scanf("%d%d",&s,&e);
    15     printf("%f",avg(a,s,e));
    16     
    17     return 0;
    18 }
    19 double avg(int a[],int s, int e)
    20 {
    21     double sum = 0;
    22     for(int i=s; i<=e; ++i){
    23         sum += a[i];
    24     }
    25     return sum/(e-s+1);
    26 }

    9、一维数组赋值

     1 #include<stdio.h>
     2 #include <string.h>
     3 #define N 100
     4 int main()
     5 {
     6     int n;
     7     int arr[N] = {0};
     8     scanf("%d",&n);
     9     /* 偷懒 直接输出了 */
    10     for(int i=0; i<n; ++i){
    11         scanf("%d",&arr[i]);
    12         if(i%2)
    13             printf("%d ",arr[i]);
    14     }
    15     return 0;
    16 }

    10、选择排序

     1 #include<stdio.h>
     2 #include <string.h>
     3 #define N 100
     4 
     5 void SelectionSort(int a[], int s, int m);
     6 int main()
     7 {
     8     int n;
     9     int arr[N] = {0};
    10     scanf("%d",&n);
    11     
    12     for(int i=0; i<n; ++i){
    13         scanf("%d",&arr[i]);
    14     }
    15     
    16     int s,m;
    17     scanf("%d%d",&s,&m);
    18     
    19     SelectionSort(arr,s,m);
    20     for(int i=0; i<n; ++i){
    21         printf("%d ",arr[i]);
    22     }
    23     
    24     return 0;
    25 }
    26 void SelectionSort(int a[], int s, int m)
    27 {
    28     for(int i = s; i<m; ++i){
    29         int max = a[i];/*降序*/
    30         int index = i;
    31         for(int j = i+1; j<=m; ++j){/*从i+1逐个比较*/
    32             if(max<a[j]){ /*是否比后面的小*/
    33                 max = a[j];
    34                 index = j;
    35             }                
    36         }
    37         if(index != i){/*找到了最大值才交换*/
    38             a[index] = a[i];
    39             a[i] = max;
    40         }
    41     }    
    42 }
  • 相关阅读:
    2014 非常好用的开源 Android 测试工具
    Android 开发最佳实践
    Java_综合案例DAO设计模式(重要)
    Java_Set接口
    Java_List
    Java_类集框架简介
    Java_对象序列化
    Java_打印流
    Java_IO编程
    Java_文件操作
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/11553300.html
Copyright © 2020-2023  润新知