【问题标题】:Program to find number of elements between two elements a and b (where a and b both are inclusive)程序查找两个元素 a 和 b 之间的元素数(其中 a 和 b 都包含在内)
【发布时间】:2021-10-06 05:24:38
【问题描述】:

给定一个大小为 n 的未排序数组,编写一个程序来查找用户定义数组的两个用户定义元素 a 和 b(其中 a 和 b 都包含)之间的元素数。
输入:arr = [1, 2, 2, 7, 5, 4]
a=2 b=5
输出:4
(数字是:2、2、5、4)。
如果a=6 b=15,则输出为3(数字分别为:6、7、15)

我尝试了以下代码,但是对于 arr = [1, 3, 3, 9, 10, 4] 和 a=9 & b=12,它显示输出:- 2。但输出应该是3. 我想不出正确的逻辑来解决这个问题。

#include <stdio.h>

int main()
{
    int n,i,a,b,c=0,d=2;

    printf("Enter size of array: ");
    scanf("%d",&n);
    
    printf("Enter elements of array: ");

    int arr[n];
    
    for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
 
    printf("\nEnter lower limit element & upper limit element respectively: ");
    scanf("%d %d",&a,&b);

    for(i=0;i<n;i++){ 
        if(arr[i]==a || arr[i]==b){
            c++;
            d=0;
        }
        
        if(arr[i]>a && arr[i]<b){
            c++;
        }
    }

    printf("Number of elements in between two elements (Both Inclusive) = %d",c+d);

    return 0;
}

请提出逻辑。我将非常感谢。

【问题讨论】:

  • 为什么要将[1, 3, 3, 9, 10, 4]912 作为限制打印3? 9 到 12(含)之间只有 2 个数字。不过,您可以简化代码。您只需要:if(arr[i]&gt;=a &amp;&amp; arr[i]&lt;=b) ++c; 在您的 for 循环中。
  • 特别处理元素等于限制的情况有什么意义? d 是什么意思?您的示例是否正确也不清楚。在您的最后一个示例中,只有两个元素(9 和 10)符合条件。
  • 欢迎来到堆栈溢出。我认为问题陈述要求包含范围内的 element 值的数量,并且如果没有元素具有该值 weird,则期望计算范围边界。我认为这是单独处理下限和上限的结果,因为数组中可能存在任何一个 - 也可能不存在。

标签: arrays c for-loop range counting


【解决方案1】:

最后一个for循环中的这条语句

d=0;

产生一个逻辑错误。

一种方法是声明两个变量而不是一个变量d

例如

int lower_limit = 0, upper_limit = 0;

然后在for循环中写

for ( i = 0; i < n; i++ ){ 
    if ( arr[i] >= a && arr[i] <= b ){
        c++;
        lower_limit |= a == arr[i];
        upper_limit != b == arr[i];  
    }
}

c += !lower_limit + !upper_limit;

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    int arr1[] = { 1, 2, 2, 7, 5, 4 };
    size_t n = sizeof( arr1 ) / sizeof( *arr1 );
    
    int a = 2, b = 5;
    
    size_t count = 0;
    int lower_limit = 0, upper_limit = 0;
    
    for ( size_t i = 0; i < n; i++ )
    {
        if ( a <= arr1[i] && arr1[i] <= b )
        {
            ++count;
            lower_limit |= arr1[i] == a;
            upper_limit |= arr1[i] == b;
        }
    }
    
    count += !lower_limit + !upper_limit;
    
    printf( "Number of elements between %d and %d is %zu\nv", a, b, count );
    
    a = 6; b = 15;
    
    count = 0;
    lower_limit = 0; upper_limit = 0;
    
    for ( size_t i = 0; i < n; i++ )
    {
        if ( a <= arr1[i] && arr1[i] <= b )
        {
            ++count;
            lower_limit |= arr1[i] == a;
            upper_limit |= arr1[i] == b;
        }
    }
    
    count += !lower_limit + !upper_limit;
    
    printf( "Number of elements between %d and %d is %zu\n", a, b, count );
    
    return 0;
}

程序输出是

Number of elements between 2 and 5 is 4
Number of elements between 6 and 15 is 3

【讨论】:

  • 你得到了我的投票来解决这个问题。我没有 :-) “为什么要 [1, 3, 3, 9, 10, 4] 以 9 和 12 作为限制打印 3?” 是什么让我。
猜你喜欢
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
相关资源
最近更新 更多