我们提供了三个数字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