首页 > 解决方案 > 如何使用循环找到一对也加起来一定和的除数?

问题描述

给定两个数,n 和 q,我想找到两个数,m 和 p,使得 n=m*p 和 q=m+p。我编译了代码,但每次都返回错误消息,即使输入的值是有效的。循环有问题吗?

编辑** 输入 n:100 输入 q:25

即使 m=20, p=5 有效,仍然返回错误消息

#include <stdio.h>

int main(void){


    int *mAddress = NULL;
    int *pAddress = NULL; 

     int n; 
     printf("enter integer: ");
     scanf("%d", &n);

     int q; 
     printf("enter query number: ");
     scanf("%d", &q); 

    int m;
    int p; 
    for (m=1; m<=n; m++){
        if(n%m == 0){
            p = n/m;
            if (m+p == q){
                mAddress = &m; 
                pAddress = &p;
                printf("The values are %d %d", m, p);
                break; 
            }
            else{
                printf("could not find any numbers");
                break; 
            }

        }

    }

标签: c

解决方案


如果你第一次没有找到它,你不应该打破循环。相反,您应该继续为每种情况发生这种n%m == 0情况。

最终,当您知道没有找到任何东西时,打印错误消息。

如果您找到了一对,我添加了一个 bool 来保存,并使用它来打印错误消息。

#include <stdio.h>
#include <stdbool.h>

int main(void){


    int *mAddress = NULL;
    int *pAddress = NULL; 

    int n; 
    printf("enter integer: ");
    scanf("%d", &n);

    int q; 
    printf("enter query number: ");
    scanf("%d", &q); 

    int m;
    int p;
    bool found = false;
    for (m=1; m<=n; m++){
        if(n%m == 0){
            p = n/m;
            if (m+p == q){
                mAddress = &m; 
                pAddress = &p;
                printf("The values are %d %d", m, p);
                found = true;
                break; 
            }
        }
    }

    if (!found) {
        printf("could not find any numbers");
    }
}


自己试试


推荐阅读