C 给定数组中的最小奇数
该代码应该在给定数组中找到最小的奇数,并将其存储在C 给定数组中的最小奇数,c,arrays,function,for-loop,C,Arrays,Function,For Loop,该代码应该在给定数组中找到最小的奇数,并将其存储在min中,但当我尝试打印min时,它总是打印0 int smallestodd(int x[5]){ int j; int k[5]; int p = 0; int r = 0; for(int h =0; h<5;h++){ j = x[h] % 2; if(j == 1){ int temp =x[h]; k[p] =temp; p++; } }
min
中,但当我尝试打印min
时,它总是打印0
int smallestodd(int x[5]){
int j;
int k[5];
int p = 0;
int r = 0;
for(int h =0; h<5;h++){
j = x[h] % 2;
if(j == 1){
int temp =x[h];
k[p] =temp;
p++;
}
}
int min = k[0];
while(k[r] !=0){
if(k[r] < min ){
min = k[r];
r++;
}
}
return min;
}
intsmallestodd(intx[5]){
int j;
int k[5];
int p=0;
int r=0;
对于(inth=0;h来说,实际上非常简单。只需检查数组中的两个条件
int smallestOdd(int arr[]){
int min = 99999; //Some very large number
for(int i = 0; i < (length of your array); i++) {
if(arr[i]%2 != 0 && arr[i] < min) { //Check if number is odd and less than the current minimum value
min = arr[i];
}
}
return min;
}
int smallestOdd(int arr[]{
int min=99999;//一些非常大的数字
对于(int i=0;i<(数组长度);i++){
如果(arr[i]%2!=0&&arr[i]
假设数组中有奇数——假设在只有偶数(或没有数字)的数组中尝试查找最小奇数为UB:)
index=0;
while(arr[index]%2==0)index++;//跳过偶数
min=arr[index++];//第一个奇数
while(索引<长度){
如果(arr[指数]%2){
如果(arr[index]
此代码避免搜索溢出,找到时返回1,如果数组只有偶数,则返回0
int getMinOdd(int arr[], int length, int *value) {
int found = 0;
for(int idx=0; idx < length; idx++) {
if (arr[idx] % 2) {
if (!found || *value > arr[idx]) {
*value = arr[idx];
}
found = 1;
}
}
return found;
}
int-getMinOdd(int-arr[],int-length,int*value){
int=0;
for(int-idx=0;idxarr[idx]){
*值=arr[idx];
}
发现=1;
}
}
发现退货;
}
如果(k[r]
和min
被初始化为k[0]
,那么在中更新r
时会有无限循环。这似乎是一个好时机。这不会打印任何内容。为什么保留k[]将min初始化为x中的第一个元素(或某个大值)就足够了然后查看其余变量,如果较小且为奇数,则将其分配给minAlso。请注意,局部变量(包括数组)不会自动初始化。未初始化的变量将具有不确定(且看似随机)的值。这意味着循环条件k[r]!=0
是错误的(因为数组中可能没有等于零的元素)。你在变量p
中有k
中的有效元素数。使用它。int-min=99999;
-这让我觉得很冷。谢谢,但我需要找到适用于所有情况的算法。与其使用99999,不如使用最大的int
-这很奇怪:int-min=int\u MAX;
这个外观这就像它在工作一样,但当我编译它时,有时并没有给出正确的数字,但它甚至给出了偶数。一旦我不明白,你能为此编写完整的代码吗?看;我在第一个版本中有一个小错误,对不起:)
int getMinOdd(int arr[], int length, int *value) {
int found = 0;
for(int idx=0; idx < length; idx++) {
if (arr[idx] % 2) {
if (!found || *value > arr[idx]) {
*value = arr[idx];
}
found = 1;
}
}
return found;
}