以下是德國人出的數學题
有點難,
但是可防老人痴呆,
您會幾題呢?
3 7 5 = 1
3 7 5 = 2
3 7 5 = 3
3 7 5 = 4
3 7 5 = 5
3 7 5 = 6
3 7 5 = 7
3 7 5 = 8
3 7 5 = 9
3 7 5 =10
做出一道,幼稚園畢業
做出三道,高中畢業
做出七道,可上大學
全部做出,清華北大
大家试试看,看看哪個人快!?不
难的,找出相互关联关系,很容易
做的,只是小学算术和初中代数基
础题。

总是有亲友会发莫名其妙的题目。
要是不去理他,好像咱们真的老年痴呆一样。
但是要是真去自己做,还是挺麻烦的
那么应该怎么解决呢?

一解

当然,答案有很多,这里提供一种
1=3&(7&5)
2=3^(5&7)
3=3|(5&7)
4=3|(5^7)
5=3^(5+7)
6=3&(5^7)
7=3|(5|7)
8=3&(5+7)
9=3^5+7
10=3|(5+7)
有人说不能用&,|,那就改一下也行,但是我懒得搞了。
源码如下,有点烦,但是思路清晰。
就是分为前两个先算和后两个先算讨论,分别算出前两个的所有可能,与后一个计算
再算出后两个所有的可能,与前一个计算。
可以把那些改成根号,加之类的,就能得到不同的结果。
需要注意,由于运算顺序,要求==之前加括号。
注意^是异或,|是与,&是和

#include<stdio.h>
int a[8] = { 0 };
int b[8] = { 0 };
int c[20][3];
int n = 0;
char s[8] = { '+','-','*','/','%','^','&','|' };
int main() {a[0] = 3 + 7; a[1] = 3 - 7; a[2] = 3 * 7; a[3] = 3 / 7; a[4] = 3 % 7; a[5] = 3 ^ 7; a[6] = 3 & 7; a[7] = 3 | 7;b[0] = 7 + 5; b[1] = 7 - 5; b[2] = 7 * 5; b[3] = 7 / 5; b[4] = 7 % 5; b[5] = 7 ^ 5; b[6] = 7 & 5; b[7] = 7 | 5;for (int i = 0; i < 20; i++) {for (int j = 0; j < 3; j++) {c[i][j] = -1;}}for (int j = 1; j < 11; j++) {for (int i = 0; i < 8; i++) {if (a[i] + 5 == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 0; }if (a[i] - 5 == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 1; }if (a[i] * 5 == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 2; }if (a[i] / 5 == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 3; }if (a[i] % 5 == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 4; }if ((a[i] ^ 5) == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 5; }if ((a[i] & 5) == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 6; }if ((a[i] | 5) == j) { c[j][0] = 1; c[j][1] = i; c[j][2] = 7; }}}for (int j = 1; j < 11; j++) {for (int i = 0; i < 8; i++) {if (3 + b[i] == j) { c[j][0] = 2; c[j][1] = i; c[j][2] = 0; }if (3 - b[i] == j) { c[j][0] = 2; c[j][1] = i; c[j][2] = 1; }if (3 * b[i] == j) { c[j][0] = 2; c[j][1] = i; c[j][2] = 2; }if (3 / b[i] == j&&b[i]!=0) { c[j][0] = 2; c[j][1] = i; c[j][2] = 3; }if ((3 % b[i]) == j) { c[j][0] = 2; c[j][1] = i; c[j][2] = 4; }if ((3 ^ b[i]) == j) { c[j][0] = 2; c[j][1] = i; c[j][2] = 5; }if ((3 & b[i]) == j) { c[j][0] = 2; c[j][1] = i; c[j][2] = 6; }if ((3 | b[i]) == j) { c[j][0] = 2; c[j][1] = i; c[j][2] = 7; }}}for (int i = 1; i < 11; i++) {if (c[i][0] == -1) continue;if (c[i][0] == 1) printf("%d=3%c7%c5\n", i, s[c[i][1]], s[c[i][2]]);if (c[i][0] == 2) printf("%d=3%c(7%c5)\n", i, s[c[i][1]], s[c[i][2]]);}
}

多解

后来,由于我们希望能有多组解吓吓他们,所以我改了一下程序

#include<stdio.h>
int a[8] = { 0 };
int b[8] = { 0 };
struct body{ int num;int c[40][3];/*c[0]代表运算顺序,c[1],c[2]代表两个运算符*/
};int n = 0;
char s[9] = { '+','-','*','/','%','^','&','|'};
int main() {a[0] = 3 + 7; a[1] = 3 - 7; a[2] = 3 * 7; a[3] = 3 / 7; a[4] = 3 % 7; a[5] = 3 ^ 7; a[6] = 3 & 7; a[7] = 3 | 7;b[0] = 7 + 5; b[1] = 7 - 5; b[2] = 7 * 5; b[3] = 7 / 5; b[4] = 7 % 5; b[5] = 7 ^ 5; b[6] = 7 & 5; b[7] = 7 | 5;struct body* ans=(struct body*)malloc(sizeof(struct body)*11);for (int i = 1; i < 11; i++)  ans[i].num = 0;for (int i = 0; i < 8; i++) {int j;j = a[i] + 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 0; ans[j].num++; }j = a[i] - 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 1; ans[j].num++; }j = a[i] * 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 2; ans[j].num++; }j = a[i] / 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 3; ans[j].num++; }j = a[i] % 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 4; ans[j].num++; }j = a[i] ^ 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 5; ans[j].num++; }j = a[i] & 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 6; ans[j].num++; }j = a[i] | 5; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 1; ans[j].c[ans[j].num][1] = i; ans[j].c[ans[j].num][2] = 7; ans[j].num++; }}for (int i = 0; i < 8; i++) {int j;j = 3 + b[i]; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 0; ans[j].c[ans[j].num][2] = i; ans[j].num++; }j = 3 - b[i]; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 1; ans[j].c[ans[j].num][2] = i; ans[j].num++; }j = 3 * b[i]; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 2; ans[j].c[ans[j].num][2] = i; ans[j].num++; }j = 3 / b[i]; if (j >= 1 && j <= 10 && b[i] != 0) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 3; ans[j].c[ans[j].num][2] = i; ans[j].num++; }j = 3 % b[i]; if (j >= 1 && j <= 10 && b[i] != 0) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 4; ans[j].c[ans[j].num][2] = i; ans[j].num++; }j = 3 ^ b[i]; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 5; ans[j].c[ans[j].num][2] = i; ans[j].num++; }j = 3 & b[i]; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 6; ans[j].c[ans[j].num][2] = i; ans[j].num++; }j = 3 | b[i]; if (j >= 1 && j <= 10) { ans[j].c[ans[j].num][0] = 2; ans[j].c[ans[j].num][1] = 7; ans[j].c[ans[j].num][2] = i; ans[j].num++; }}for(int i=0;i<11;i++){for(int j=0;j<ans[i].num;j++){if (ans[i].c[j][0] == 1) printf("%d = (3%c7)%c5\n", i, s[ans[i].c[j][1]], s[ans[i].c[j][2]]);if (ans[i].c[j][0] == 2) printf("%d = 3%c(7%c5)\n", i, s[ans[i].c[j][1]], s[ans[i].c[j][2]]);}}
}

答案是
1 = (3-7)+5
1 = (3* 7)%5
1 = (3%7)&5
1 = (3^7) ^5
1 = (3&7)&5
1 = (3|7)/5
1 = 3-(7-5)
1 = 3/(7-5)
1 = 3%(7-5)
1 = 3^(7-5)
1 = 3&(7/5)
1 = 3-(7%5)
1 = 3/(7%5)
1 = 3%(7%5)
1 = 3^(7%5)
1 = 3-(7^5)
1 = 3/(7^5)
1 = 3%(7^5)
1 = 3 ^ (7^5)
1 = 3&(7&5)
2 = (3+7)/5
2 = (3|7)-5
2 = (3|7)%5
2 = (3|7)^5
2 = 3&(7-5)
2 = 3-(7/5)
2 = 3^(7/5)
2 = 3&(7%5)
2 = 3&(7^5)
3 = (3%7)%5
3 = (3&7)%5
3 = 3%(7+5)
3 = 3|(7-5)
3 = 3%(7*5)
3 = 3&(7*5)
3 = 3*(7/5)
3 = 3/(7/5)
3 = 3|(7/5)
3 = 3|(7%5)
3 = 3|(7^5)
3 = 3%(7&5)
3 = 3%(7|5)
3 = 3&(7|5)
4 = (3-7)&5
4 = (3*7)/5
4 = (3^7)%5
4 = (3^7)&5
4 = 3+(7/5)
4 = 3^(7|5)
5 = (3+7)-5
5 = (3*7)&5
5 = (3/7)+5
5 = (3/7)^5
5 = (3/7)|5
5 = (3^7)|5
5 = (3|7)&5
5 = 3+(7-5)
5 = 3+(7%5)
5 = 3+(7^5)
6 = (3%7)^5
6 = (3&7)^5
6 = 3*(7-5)
6 = 3*(7%5)
6 = 3*(7^5)
6 = 3^(7&5)
7 = (3%7)|5
7 = (3&7)|5
7 = (3|7)|5
7 = 3|(7&5)
7 = 3|(7|5)
8 = (3%7)+5
8 = (3&7)+5
8 = 3+(7&5)
9 = (3^7)+5
10 = 3+(7|5)

总结

当然正确答案里有根号,但是这个我也懒得改了。
本来我以为这个程序难度不是很大,但是写的时候还是出了不少bug,花了挺长时间的。
一个大佬帮助我看过程序,并且熬夜写了一个用链表的,这里就不展示了。但是十分感谢他。
希望大家下次遇到这种亲友,可以顺利告诉他答案。

德国人的数学题375=1相关推荐

  1. 江苏省小学升初中数学题:求图中阴影面积

    江苏省小学升初中数学题:求图中阴影面积 分析:小学升初中数学题应该是要考察图形的分割与拼接,而此题中的阴影面积实际最终需要用到三角函数的知识,无法简单通过图形的分割与拼接求得.如果是小学数学题,其真实 ...

  2. 越南一难倒博士的趣味数学题

    越南有一道难倒博士的趣味数学题,见下图: 在空格中填入1...9,可以重复,求使等式成立的一个组合 ======================================= 我吐槽一下,这题在N ...

  3. HDU3434数学题

    纯粹的数学题,题目的意思是给你一组序列,让你能同时改变它的一个子序列,让其子序列的值增加1,或者减少1. 思路的话,就是找其中的数学规律,给你的序列例如是:3,5,1,4,7.先求出其序列的正差和=5 ...

  4. 【AAAI Oral】利用深度增强学习自动解数学题,准确率提升15%

    [AI科技大本营导读]增强学习和人类学习的机制非常相近,DeepMind已经将增强学习应用于AlphaGo以及Atari游戏等场景当中.作为智能教育领域的引领者,阿凡题研究院首次提出了一种基于DQN( ...

  5. 北大计算机博士生先于OpenAI发表预训练语言模型求解数学题论文,曾被顶会拒绝...

      视学算法报道   来源:EMNLP 编辑:好困 小咸鱼 [新智元导读]北大博士生沈剑豪同学一篇关于「用语言模型来解决数学应用题」的EMNLP投稿在综合评审时被认为不够重要,收录于Findings而 ...

  6. OpenAI新发现:GPT-3做小学数学题能得55分,验证胜过微调!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 会做数学题的GPT-3,逻辑推理能力是上了一个高度,但还不能及格. ...

  7. (每日一题)P3768 简单的数学题(确信)(莫反 + 欧拉反演 + 杜教筛 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.20 莫反 和上午的那道题比较类似的 ...

  8. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P5431 [模板]乘法逆元2 题目传送门 题目大意: 给定 nnn 个正整数 aia_iai​ ,求 ...

  10. LeetCode 41. First Missing Positive--Python 解法--数学题-找到不存在的最小正整数-O(1)空间复杂度

    题目地址:First Missing Positive - LeetCode Given an unsorted integer array, find the smallest missing po ...

最新文章

  1. 深度学习实战讲词嵌入 很好的 NLP电子书
  2. 浅入浅出 Android 安全:第三章 Android 本地用户空间层安全
  3. AD5933测量容性负载时的神秘振荡信号
  4. c语言中如何表示矩阵的乘法,c语言矩阵相乘
  5. 【hdoj】3007 Buried memory 【计算几何--最小圆覆盖】
  6. Science亮点!ExSeq:完整生物组织的原位空间转录组分析
  7. 记录搭建Odoo框架
  8. 使用RegularExpressionValidator验证(转)
  9. 面试题32:从上到下打印二叉树
  10. [EasyHexo 专栏] #1 - Markdown 编辑器推荐与语法简介
  11. 【iOS开发】使用XCode 10添加Launch Image(启动图片)
  12. Gdiplus的使用 gdi+
  13. CRNN论文翻译——中文版
  14. 人工智能、深度学习和机器学习有哪些区别?
  15. MT4电脑版软件有哪些特征?相比MT5软件有什么不同?
  16. Geosoft Oasis.Montaj.v7.1.1简介
  17. 总结八:面试程序员前需要的准备工作
  18. 如何fine tuning
  19. L4级自动驾驶,插上车路协同的翅膀才能飞?
  20. GitWeb服务器搭建

热门文章

  1. 关于深度学习的网络流量分类论文整理(一)
  2. python 分析qq聊天记录
  3. 动态规划--背包计数--hdu2079选课时间
  4. cesium加载entity图片缩放_Linux 下最棒的 11 个图片查看器 | Linux 中国
  5. 互联网日报 | 微信聊天上线“超链接”功能;B站月付费用户达1500万;优客工场正式登陆纳斯达克...
  6. 秋天下载中心统计系统 入门安装
  7. .net实现串口通信
  8. NCM转MP3神奇的网页
  9. 基于微信功能社群助手
  10. 二十一世纪大学英语读写教程学习笔记(原文)——10 - Cloning: good Science or Baaaad Idea(克隆技术是好科学还是馊主意)