计算可以使用C ++中的两个数字构造的数字

我们提供了三个数字X,Y和N(以定义范围[1,N])。目标是找到只能使用X和Y任意次构造的[1,N]范围内的所有数字。

例如,如果X = 2和Y = 3。可以使用2三次(2 + 2 + 2)或3次两次(3 + 3)来构造6号。类似地,可以使用2次两次和3次一次(2 + 2 + 3)来构造7。

我们将通过从1到N的每个数字中减去X或Y来完成此操作。如果最终数字减少为0,则增加计数。

让我们通过示例来理解。

输入值 

N=10 X=4, Y=3

输出结果 

Total numbers constructed using X & Y only: 7

说明 

Numbers constructed by 3 and 4 only:
3, 4, 6 (3+3), 7 (3+4), 8 (4+4), 9 (3+3+3), 10 (3+3+4)

输入值 

N=10 X=5, Y=4

输出结果 

Total numbers constructed using X & Y only: 5

说明 

Numbers constructed by 4 and 5 only:
4, 5, 8(4+4), 9 (4+5), 10 (5+5)

以下程序中使用的方法如下

  • 我们取三个整数X,Y和N。

  • 函数ConstructNums(int n,int x,int y)返回只能使用x和y构造的数字计数。

  • 对于此类数字,将初始变量计数设为0。

  • 使用for循环遍历数字范围。i = 1至i <= n

  • 现在,对于每个数字num = i,使用while循环检查num> 0,

  • while(num%x == 0)并且num不为0时减去x。

  • while(num%y == 0)并且num不为0时减去y。

  • 如果在将x和y相减后不能被两个数整除并且大于两个数,则从中减去x和y。

  • 如果在外部while循环之后检查num是否为0。意味着x,y或两者都可以使num。增量计数。

  • 在所有循环结束时,计数将为总数。

  • 返回计数结果。

示例

#include <bits/stdc++.h>
using namespace std;
int constructNums(int n,int x,int y){
   int count = 0;
   for (int i = 1; i <= n; i++) {
      int num = i;
      while(num>0){
         while((num%x)==0 && num!=0)
         num-=x;
         while((num%y)==0 && num!=0)
         num-=y;
         if (num>x && num>y)
            num=num-x-y;
         else
            break;
      }
      if (num==0)
         { count++;}
   }
   return count;
}
int main(){
   int N=20;
   int X=5,Y=4;
   cout <<"Total numbers constructed using X & Y only:"<<constructNums(N,X,Y);
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Total numbers constructed using X & Y only:14
猜你喜欢