Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 给定数组中的最小奇数_C_Arrays_Function_For Loop - Fatal编程技术网

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;
}