给出一个大小为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;
}请提出逻辑。我会对此非常感激的。
发布于 2021-07-30 17:32:37
最后一个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 3https://stackoverflow.com/questions/68594798
复制相似问题