使用 C++ 构建两个数字的数字计数
我们提供了三个数字 X、Y 和 N(用于定义范围 [1,N])。目标是在范围 [1,N] 中找到所有可以使用 X 和 Y 任意次数构建的数字。
例如,如果 X=2 且 Y=3。数字 6 可以使用 2 三次(2+2+2)或 3 两次(3+3)构建。同样,7 可以使用 2 两次和 3 一次(2+2+3)构建。
我们将通过从 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 构建的数字的计数。
将初始变量 count 设为 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。递增 count。
在所有循环结束时,count 将包含总数。
返回 count 作为结果。
示例
#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
广告