zoukankan      html  css  js  c++  java
  • 求二维数组鞍点 一维数组循环右移k位

    1、鞍点是指矩阵中的某元素A[i][j]是第i行中值最小的元素,同时又是第j列中值最大的元素。试设计一个算法求矩阵A中的所有鞍点。

     1 #include <stdio.h>
     2 
     3 #define M 4
     4 #define N 5
     5 /* 求二维数组的所有鞍点 */
     6 void saddlePoint(int arr[M][N])
     7 {
     8     int i,j,k,min,c,count=0;
     9     int minI[N] = {0};  /* 存储c个, 第i行最小元素所在列 */
    10     for(i=0; i<M; ++i ){
    11         min = arr[i][0]; /* 二维数组第i行第0个元素 */
    12         c = 1; 
    13         minI[c] = 0;
    14         for(j=1; j<N; ++j){
    15             if(arr[i][j]<min){
    16                 min = arr[i][j];
    17                 c = 1;    /* 第i行最小元素的个数 */
    18                 minI[c] = j; /* 第i行最小元素的下标j */
    19             }
    20             else if(arr[i][j]==min){ /* 第i行存在多个最小元素 */
    21                 c++;         /* 第i行最小元素 共c个*/
    22                 minI[c] = j; /* 第i行最小元素 所在列j */
    23             }
    24         }
    25         for(j=1; j<=c; ++j){
    26             k=0;
    27             while(k<M && arr[i][minI[j]]>=arr[k][minI[j]])
    28                 k++;   /* 如果第i行最小元素大, 列k++ */
    29             if(k>=M){  /* 第i行最小元素是第j列的最大元素 */
    30                 count++;   /* 鞍点个数++ */
    31                 /* 鞍点所在行、列、数据 */
    32                 printf("arr[%d][%d]=%d
    ", i, minI[j],min); 
    33             }
    34         }
    35     }
    36     if(count==0)
    37         printf("鞍点不存在
    ");
    38     else
    39         printf("有%d个鞍点
    ", count);
    40 }
    41 
    42 int main()
    43 {
    44     int arr[M][N] = { {6,6,5,7,5},
    45                       {8,7,4,8,1},
    46                       {7,6,5,8,5},
    47                       {9,2,2,4,3}
    48                     };
    49     saddlePoint(arr);
    50     return 0;
    51 }

    2、设计一个算法,实现将一维数组A(下标从1开始)中的元素循环右移k位,要求只用一个元素大小的辅助空间,并给出算法的时间复杂度。

     1 /* 算法复杂度O(n) */
     2 #include <stdio.h>
     3 
     4 #define N 100
     5 void reverse(int a[],int n){
     6     int i,t;
     7     for(i=0; i<n/2; ++i){
     8         t = a[i];
     9         a[i] = a[n-i-1];
    10         a[n-i-1] = t;
    11     }
    12 }
    13 
    14 void rotate(int a[], int n, int k){
    15     k %= n;
    16     reverse(a+1,n);
    17     reverse(a+1,k);
    18     reverse(a+1+k,n-k);
    19 }
    20 
    21 int main()
    22 {
    23     int arr[N] = {0,1,2,3,4,5,6};
    24     int i, n = 6, k = 2;
    25     rotate(arr,n,k);
    26     for(i=1; i<n; ++i){ /* 下标从1开始 */
    27         printf("%d ",arr[i]);
    28     }
    29     return 0;
    30 }
    /*算法复杂度O(n^2)*/
    #include <stdio.h>
    
    #define N 100
    void reverse(int a[],int n, int k){
        int i,j;
        k %= n;
        for(i=0; i<k; ++i){
            a[0] = a[n];
            for(j=n-1; j>=1; j--)
                a[j+1] = a[j];
            a[1] = a[0];
        }
    }
    
    int main()
    {
        int arr[N] = {0,1,2,3,4,5,6};
        int i, n = 6, k = 2;
        reverse(arr,n,k);
        for(i=1; i<n; ++i){ /* 下标从1开始 */
            printf("%d ",arr[i]);
        }
        return 0;
    }
  • 相关阅读:
    android studio的lib和jniLibs
    Android Broadcast Receive
    上周热点回顾(7.18-7.24)团队
    上周热点回顾(7.11-7.17)团队
    .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点团队
    上周热点回顾(7.4-7.10)团队
    上周热点回顾(6.27-7.3)团队
    .NET跨平台之旅:将示例站点升级至ASP.NET Core 1.0团队
    上周热点回顾(6.20-6.26)团队
    上周热点回顾(6.13-6.19)团队
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/12739118.html
Copyright © 2011-2022 走看看