千千蓝鲸1601

描述

输入 4 个小于 10 的正整数,不改变它们的顺序,在两个数之间可以添加+、-、*、/(整除)这四种运算符,然后从左往右计算整个式子的值(不考虑优先级,运算符严格从左往右计算),最终得到的值是否是一个给定的值 n,如果可以得到,请问有多少种不同的添加方法?

例如四个数字 1、2、3、4,要得到给定的值 24,可以有两种方法:1+2+3×4 和 1×2×3×4,没有其他方法了。

输入描述

输入两行,第一行有 4 个小于 10 的正整数,每个数之间用一个空格隔开。

第二行是给定的值 n。

输出描述

输出添加运算符后,式子的值为n的方法数。

样例输入 1

1 2 3 4

24

样例输出 1

2

ac代码:

#include <iostream>

typedef long long Int;

Int a, b, c, d, n, count;

int main() {

Int ysz;

std::cin >> a >> b >> c >> d >> n;

for (Int i = 1; i <= 4; i++) {//一开始我一层循环算一次,没有复原,但是歪打正着对了,改为在最后在算

for (Int j = 1; j <= 4; j++) {

for (Int x = 1; x <= 4; x++) {

ysz = a;

if (i == 1) {//第二次循环时没有还原,+了再-,应该for完在最里面一次性算

ysz += b;

} else if (i == 2) {

ysz -= b;

} else if (i == 3) {

ysz *= b;

} else {

ysz /= b;

}

if (j == 1) {

ysz += c;

} else if (j == 2) {

ysz -= c;

} else if (j == 3) {

ysz *= c;

} else {

ysz /= c;

}

if (x == 1) {

ysz += d;

} else if (x == 2) {

ysz -= d;

} else if (x == 3) {

ysz *= d;

} else {

ysz /= d;

}

if (ysz == n) {

count++;

}

}

}

}

std::cout << count;

return 0;

}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值