问题:编写一个程序,该程序获取一个数字列表(比方说4个数字)和一个额外数字,并检查该额外数字是否等于列表中两个数字的乘积。如果是,则返回true,否则返回false。
例如,一个数字列表是(2,4,8,16)一个额外的数字是32,程序将检查32是否等于列表中数字的两个数字,并返回true,在本示例中它将是因为32等于,我的解决方案在下面,但不正确,不胜感激
int i;
int b;
int listA[4] = {2, 4, 8, 10};
printf("Enter your Extra number value \n");
scanf("%d", &b);
for(i=0; i<4; i++){//?
if(listA[i] * listA[i+] == b){// i+1 ?
printf("True! \n");
}else{
printf("False \n");
}
答案 0 :(得分:0)
您需要编写两个嵌套循环。
您可以编写一个单独的函数。
我想没有必要对原始数组(列表)进行排序。
例如
#include <stdio.h>
int is_multiplied( const int a[], size_t n, int value )
{
int result = 0;
if ( !( n < 2 ) )
{
for ( size_t i = 0; !result && i < n - 1; i++ )
{
for ( size_t j = i + 1; !result && j < n; j++ )
{
result = a[i] * a[j] == value;
}
}
}
return result;
}
int main(void)
{
int a[] = { 2, 4 , 8 , 10 };
const size_t N = sizeof( a ) / sizeof( *a );
int value = 32;
printf( "%s\n", is_multiplied( a, N, value ) ? "true" : "false" );
return 0;
}
程序输出为
true
答案 1 :(得分:0)
由于您的代码甚至无法编译。我想像您没有花很多时间。
int main()
{
int i;
int b;
int listA[4] = {2, 4 , 8 , 10};
bool verified = false;
printf("Enter your Extra number value \n");
scanf("%d" ,&b);
for(i=0; i<4 ; i++ )
{
for(int j=0; j<4; j++ )
{
if(j==i)
{
break;
}
if(listA[i] * listA[j] == b)
{
printf("True! \n");
verified = true;
continue;
}
else
{
//printf("False \n");
}
}
}
if(!verified)
{
printf("False \n");
}
}
答案 2 :(得分:-1)
首先以最简单的方法解决这类问题。使用嵌套的for循环。
如其中一条注释中所述,添加一个嵌套的for循环。
int i=0;
int j=0;
int b=0;
int listA[4] = {2, 4 , 8 , 10};
printf("Enter your Extra number value \n");
scanf("%d" ,&b);
for(i=0; i<4 ; i++){//?
for (j=i; j<4; j++) {
if(listA[i] * listA[j] == b)
{
printf("True! \n");
return 0;
}
}
}
printf("False \n");
return 0;
进一步优化:-
for(i=0; i<4 ; i++){
if ((i > b) || ((b % i) != 0))
continue;
k = b/i;
for (j=i; j<4; j++) {
if(listA[j] == k)
{
printf("True! \n");
return 0;
}
}
}