一:问题
有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就是当前下标
{
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的下标和值占位数来存储更长的数据,或者只需要我们获取最小下标,这样会更加容易扩展
转载于:https://www.cnblogs.com/ssyfj/p/9567479.html
相关资源:数据结构(C )有关练习题