1. 程式人生 > >算法習題---線性表之控制變量個數獲取數據最小值

算法習題---線性表之控制變量個數獲取數據最小值

.com dex style find oid 常量 一個 std 一位

一:問題

有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的下標和值占位數來存儲更長的數據,或者只需要我們獲取最小下標,這樣會更加容易擴展

算法習題---線性表之控制變量個數獲取數據最小值