鱼C论坛

 找回密码
 立即注册
查看: 3324|回复: 21

[已解决]【C++】给定四个整数和结果,求不同运算求得结果的方案数量

[复制链接]
发表于 2020-12-13 00:21:26 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 yexing 于 2020-12-13 00:27 编辑

原题:
11.png
我的代码:
  1. #include<cstdio>
  2. int main()
  3. {
  4.         int a, b, c, d, m;
  5.         int temp, count = 0;
  6.        
  7.         scanf("%d %d %d %d %d", &a, &b, &c, &d, &m);
  8.        
  9.         for(int i = 0; i < 4; i++)
  10.         {
  11.                 for(int j = 0; j < 4; j++)
  12.                 {
  13.                         for(int k = 0; k < 4; k++)
  14.                         {
  15.                                 temp = 0;
  16.                                 switch(i)
  17.                                 {
  18.                                         case 0: temp = a+b; break;
  19.                                         case 1: temp = a-b; break;
  20.                                         case 2: temp = a*b; break;
  21.                                         case 3: temp = a/b; break;
  22.                                 }
  23.                                 switch(j)
  24.                                 {
  25.                                         case 0: temp += c; break;
  26.                                         case 1: temp -= c; break;
  27.                                         case 2: temp *= c; break;
  28.                                         case 3: temp /= c; break;
  29.                                 }
  30.                                 switch(k)
  31.                                 {
  32.                                         case 0: temp += d; break;
  33.                                         case 1: temp -= d; break;
  34.                                         case 2: temp *= d; break;
  35.                                         case 3: temp /= d; break;
  36.                                 }
  37.                                 if(temp == m)
  38.                                 {
  39.                                         count++;
  40.                                 }
  41.                         }
  42.                 }
  43.         }
  44.         printf("%d", count);
  45.        
  46.         return 0;
  47. }
复制代码

输出:
22.png
问题:
输出结果不对,请问我的代码有什么问题?
最佳答案
2020-12-13 00:21:27
本帖最后由 风过无痕1989 于 2020-12-13 10:14 编辑

这个程序用不着弄得这么复杂,如果 a、b、c、d 四个数可以自由移动,才需要循环,并可以得出32种完成算式方案;如果 a、b、c、d 四个数不可以自由移动,就只要将 +、-、* 三个运算移动到不同的位置即可得出两种方案。程序如下:
  1. // 在 a, b, c, d 四个数中加上运算符 +、-、* 之一,使算式结果等于 m
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int a, b, c, d, m;
  6.         int count = 0;
  7.         scanf("%d%d%d%d%d", &a, &b, &c, &d, &m);  // 控制符中间不要留空格,输入时用空格隔开就行了

  8.         if (m == a + b - c * d)
  9.                 count++;
  10.         if (m == a + b * c - d)
  11.                 count++;
  12.         if (m == a * b + c - d)
  13.                 count++;
  14.         if (m == a * b - c + d)
  15.                 count++;
  16.         if (m == a - b + c * d)
  17.                 count++;
  18.         if (m == a - b * c + d)
  19.                 count++;

  20.         if (count != 0)
  21.                 printf("有 %d 种完成算式的方案\n", count);
  22.         else
  23.                 printf("不能完成算式");

  24.         return 0;
  25. }
复制代码

最佳答案

查看完整内容

这个程序用不着弄得这么复杂,如果 a、b、c、d 四个数可以自由移动,才需要循环,并可以得出32种完成算式方案;如果 a、b、c、d 四个数不可以自由移动,就只要将 +、-、* 三个运算移动到不同的位置即可得出两种方案。程序如下:

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 00:21:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2020-12-13 10:14 编辑

这个程序用不着弄得这么复杂,如果 a、b、c、d 四个数可以自由移动,才需要循环,并可以得出32种完成算式方案;如果 a、b、c、d 四个数不可以自由移动,就只要将 +、-、* 三个运算移动到不同的位置即可得出两种方案。程序如下:
  1. // 在 a, b, c, d 四个数中加上运算符 +、-、* 之一,使算式结果等于 m
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int a, b, c, d, m;
  6.         int count = 0;
  7.         scanf("%d%d%d%d%d", &a, &b, &c, &d, &m);  // 控制符中间不要留空格,输入时用空格隔开就行了

  8.         if (m == a + b - c * d)
  9.                 count++;
  10.         if (m == a + b * c - d)
  11.                 count++;
  12.         if (m == a * b + c - d)
  13.                 count++;
  14.         if (m == a * b - c + d)
  15.                 count++;
  16.         if (m == a - b + c * d)
  17.                 count++;
  18.         if (m == a - b * c + d)
  19.                 count++;

  20.         if (count != 0)
  21.                 printf("有 %d 种完成算式的方案\n", count);
  22.         else
  23.                 printf("不能完成算式");

  24.         return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 07:01:41 From FishC Mobile | 显示全部楼层
加减乘除的优先级,你看样例1+2*3-4在你的代码就变成了(1+2)*3-4
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 09:10:42 | 显示全部楼层
baige 发表于 2020-12-13 07:01
加减乘除的优先级,你看样例1+2*3-4在你的代码就变成了(1+2)*3-4

啊,好的谢谢,我来改改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 09:41:45 | 显示全部楼层
昨天这个帖子是在普通的求助区的,我编写好程序,准备来回答时,却发现帖子不见了。

求助问题,还是普通求助比较好,悬赏求助不如普通求助,这是本论坛的一个不合理的地方。它们的区别:
悬赏求助,你选为最佳答案后,除得到你这悬赏10个鱼币,什么都没有了
而普通求助,你选为最佳答案后,系统给我们的奖励是:鱼币+3,荣誉+2,技术值+1

能回答你问题的朋友们,在论坛混久了,谁会缺这几个鱼币?他们更多的是想得到 技术+1,因为在本论坛,只有技术值是买不来的,只有脚踏实地回答问题(不能是悬赏问题),然后被选为最佳答案,才能得到。

也正是因为这个原因,有些本来可以回答你问题的朋友,却不会来回答你的问题,因为编写好程序,还要调试,最后得到几个鱼币,太浪费时间了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 09:51:15 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 09:27
这个程序用不着弄得这么复杂,如果 a、b、c、d 四个数可以自由移动,才需要循环,并可以得出32种英语培训; ...

十分感谢指明思路!
但我在想这个算式是不是可以重复填入某个运算符号,例如 a+b+c+d,但你这个程序里似乎没有考虑这种情况
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 09:51:49 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 09:41
昨天这个帖子是在普通的求助区的,我编写好程序,准备来回答时,却发现帖子不见了。

求助问题,还是普通 ...

好的好的,以后会注意
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 10:01:08 | 显示全部楼层
下面的程序是我昨晚写的, a, b, c, d 四个数可以任意调整位置。既然已经写了,还是给你吧
  1. // 在 a, b, c, d 四个数中加上运算符 +、-、* 之一,使算式结果等于 m
  2. #include<stdio.h>
  3. int main()
  4. {
  5.         int a, b, c, d, m;
  6.         int arr[5],count = 0;
  7.         for(a = 0;a < 5;a++)
  8.         scanf("%d", &arr[a]);  // 控制符中间不要留空格,输入时用空格隔开就行了

  9.         m = arr[4];
  10.         for (a = 0;a < 4;a++)
  11.         {
  12.                 for (b = 0;b < 4;b++)
  13.                 {
  14.                         for (c = 0;c < 4;c++)
  15.                         {
  16.                                 for (d = 0;d < 4;d++)
  17.                                 {
  18.                                         if (a != b && b != c && c != d && a != c && a != d && b != d)
  19.                                         {
  20.                                                 if (m == arr[a] + arr[b] - arr[c] * arr[d])
  21.                                                         count++;
  22.                                                 if (m == arr[a] + arr[b] * arr[c] - arr[d])
  23.                                                         count++;
  24.                                                 if (m == arr[a] * arr[b] + arr[c] - arr[d])
  25.                                                         count++;
  26.                                                 if (m == arr[a] * arr[b] - arr[c] + arr[d])
  27.                                                         count++;
  28.                                                 if (m == arr[a] - arr[b] + arr[c] * arr[d])
  29.                                                         count++;
  30.                                                 if (m == arr[a] - arr[b] * arr[c] + arr[d])
  31.                                                         count++;
  32.                                         }
  33.                                 }
  34.                         }
  35.                 }
  36.         }

  37.         if (count != 0)
  38.                 printf("有 %d 种完成算式的方案\n", count);
  39.         else
  40.                 printf("不能完成算式");

  41.         return 0;
  42. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 10:02:30 | 显示全部楼层
yexing 发表于 2020-12-13 09:51
十分感谢指明思路!
但我在想这个算式是不是可以重复填入某个运算符号,例如 a+b+c+d,但你这个程序里似 ...

三个运算符,在不同的位置,就有六种排列,没有重复的!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 10:09:11 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 10:02
三个运算符,在不同的位置,就有六种排列,没有重复的!

题里也没说一定要三个运算符都填啊(捂脸)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 10:09:53 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 10:01
下面的程序是我昨晚写的, a, b, c, d 四个数可以任意调整位置。既然已经写了,还是给你吧

啊谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 10:12:13 | 显示全部楼层
yexing 发表于 2020-12-13 10:09
题里也没说一定要三个运算符都填啊(捂脸)

三个运算不都填上,运算符又不能重复使用,四个数就没法全部用上
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 10:17:21 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 10:12
三个运算不都填上,运算符又不能重复使用,四个数就没法全部用上

题里面没说运算符不能重复使用啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 10:41:07 | 显示全部楼层
yexing 发表于 2020-12-13 10:17
题里面没说运算符不能重复使用啊

你将帖子再改回普通求助吧,这样,你就不需要付出那10个鱼币了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 10:56:27 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 10:41
你将帖子再改回普通求助吧,这样,你就不需要付出那10个鱼币了

改不回去除非删帖重发
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-13 10:58:26 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 10:41
你将帖子再改回普通求助吧,这样,你就不需要付出那10个鱼币了

好像也删不了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 12:23:44 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 09:41
昨天这个帖子是在普通的求助区的,我编写好程序,准备来回答时,却发现帖子不见了。

求助问题,还是普通 ...

……真的就在乎那点技术值吗?只是数据而已,不要把他看得太重。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 12:27:36 | 显示全部楼层
yexing 发表于 2020-12-13 10:17
题里面没说运算符不能重复使用啊

if (m == a - b * c + d)
    count++;
你想要运算符号重复使用,改这个条件呀,比如:
if (m == a + b + c + d)
    count++;
if (m == a - b - c - d)
    count++;
if (m == a * b * c * d)
    count++;
。 。 。
将这9个条件添加进程序即可
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 12:29:22 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-12-13 12:23
……真的就在乎那点技术值吗?只是数据而已,不要把他看得太重。

跟我一个人说,没有用的,你看看论坛上的悬赏帖子,有几个人回答的?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 12:35:52 | 显示全部楼层
风过无痕1989 发表于 2020-12-13 12:29
跟我一个人说,没有用的,你看看论坛上的悬赏帖子,有几个人回答的?


普通提问帖没人理的也不少,但是悬赏贴会一直挂在首页,所以就很显眼了。
而且悬赏贴很多有一些奇怪的需求,没人答也不奇怪。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 20:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表