计算可以使用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(intn,intx,inty)返回只能使用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