如何解决此问题并修复代码?

时间:2019-08-16 17:37:13

标签: c

问题:编写一个程序,该程序获取一个数字列表(比方说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");
}

3 个答案:

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