arrays - 程序查找两个元素 a 和 b 之间的元素数(其中 a 和 b 都包含在内)
问题描述
给定一个大小为 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;
}
请提出逻辑。我将非常感谢。
解决方案
这个语句在最后一个 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
推荐阅读
- php - htaccess 从根目录显示文件夹中的内容
- c# - .Net Core 3.1 本地化不适用于部署后除英语以外的其他文化的 Accept-Language Header
- oracle-apex - Oracle Apex - 一次显示所有选项卡,而不是仅显示活动选项卡
- php - 自定义学说注释错误:[创建错误] 属性上声明的注释没有名为“mapping¨”的属性
- primeng - 更改 Primeng 数据表中可编辑行的背景颜色
- c++ - 在 C++ 中实现 dwrite 以绘制字体字形导致 nullptr 错误
- ios - 如何在 Mac Catalyst 应用程序中检测颜色面板的颜色变化?
- azure - Microsoft 评估和规划工具包未发现 Azure VM 上的 MSSQL
- redis - 如何检测 Redis 主/从故障转移?
- angular - `ng-select` 无法在启动时绑定属性