zoukankan      html  css  js  c++  java
  • 算法习题---线性表之控制变量个数获取数据最小值

    一:问题

    有N个个位正整数存放在int整型数组A中,N定义为已经定义的常量N<=9,数组长度为N,另给一个int型变量i,要求只用上述变量,写一个算法,找出N个整数中的最小者,并且要求不能破坏数组数据。

    二:解题思路

    i作为变量,这个变量的百位用于储存最小值地址,十位用来储存最小值,个位用于当前指向的地址。

    三:算法实现

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    #define N 9
    
    //i的百位存储最小位置下标,十位存储最小值,个位存储当前索引下标
    void findMin(int a[])    //使用函数的话可以按照指针来做,不过太取巧了
    {
        int i = a[0] * 10;    //0*100+a[0]*10+0    百位存储最小位置下标,十位存储最小值,个位存储当前索引下标
        while (i%10<N)    //i%10就是当前下标
        {
            if (a[i % 10]<(i % 100 / 10))    //获取i的十位数字来比较
            {
                //更新i值的百位数字和十位数字
                i = (i % 10) * 100 + a[i % 10] * 10 + i % 10;
            }
            i++;    //当前位置进一格
        }
        printf("min value:%d in index:%d", i % 100 / 10, i / 100);
    }
    
    int main()
    {
        int a[N] = { 9, 8, 7, 2, 1, 3, 4, 5, 4};
    
        findMin(a);
    
        system("pause");
        return 0;
    }

    四:注意

    该算法的前提是:有N个个位正整数存放在int整型数组A中,N定义为已经定义的常量N<=9(也就是说数组长度不能超过9,因为我们i数据只用了一位来存储下标和数值)
    思考:可以扩展i的下标和值占位数来存储更长的数据,或者只需要我们获取最小下标,这样会更加容易扩展
  • 相关阅读:
    etl接口测试总结
    LR controller 参数化
    Mysql导入导出命令
    mysql基本命令
    mysql用户管理(新增用户及权限管理)
    源码编译搭建LAMP
    【OpenGL】Shader实例分析(一)-Wave
    仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)
    cocos2d-x游戏开发(十四)用shader使图片背景透明
    泰然发布了一系列 OpenGL3.0 的教程,推荐大家参考学习
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9567479.html
Copyright © 2011-2022 走看看