我正在try 编写一个程序,它会迭代地更新数组中的最小数字,直到数组中的所有数字都相同(用于查找LCM的algorithm).我的程序似乎在无休止的循环中结束.我的猜测是,这是因为are_same()
总是返回零,这是由get_min_index()
和/或divisors[min_index] += divisors[min_index]
中的某些东西引起的.我想知道这是否与我没有意识到的C语言的某些特性有关.有经验的C程序员能帮我解决这个问题吗?
#include <stdio.h>
int are_same(int array[], int length) {
for (int i = 1; i < length; i++) {
if (array[0] != array[i]) {
return 0;
}
}
return 1;
}
int get_min_index(int array[], int length) {
int min_value = array[0];
int min_index = 0;
for (int i = 1; i < length; i++) {
if (array[i] < min_value) {
min_value = array[i];
min_index = i;
}
}
return (min_index);
}
int main(void) {
int divisors[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
int length = sizeof(divisors) / sizeof(divisors[0]);
int min_index;
do {
min_index = get_min_index(divisors, length);
divisors[min_index] += divisors[min_index];
} while (are_same(divisors, length) == 0);
printf("lcm=%d", divisors[0]);
return(0);
}