⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 math_problem.c

📁 一个数学问题的C解法: 问题: 教授选出两个从2到9的数
💻 C
字号:


/*问题:
教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数

  甲说:“我猜不出”

  乙说:“我猜不出”

  甲说:“我猜到了”

  乙说:“我也猜到了”

  问这两个数是多少

*/


#include <stdio.h>
/*
 adjust()主要是用来判断这两个数的和或者积中存在的可能情况
*/
int adjust(int m,int type)//m:两数之和或者积 type:两数的运算关系,0-和,1-积
{
 int i,j,counter=0;
 for(i=2;i<10;i++)
  for(j=2;j<10;j++)
  {
   if(i<=j)
   {
    switch(type)
    {
     /*
      判断和或者m可能由哪些2~9的数组成,如
       和:8=2+6;8=3+5;8=4+4;
       积:16=2*8;16=4*4;
      同时把记数器+1,
     */
     case 0: if(i+j==m) counter++;break;
     case 1: if(i*j==m) counter++;break;
    }
   }
  }
 /*“第一次猜不出来,第二次就猜出来了”就是指经过两次才确定两个数
  如果第一次就猜出来了,如4,5(4=2+2;5=2+3)就不符合题意//这时counter=1
  如果大于两次,如8(8=2+6,8=3+5,8=4+4)也不符合题意//这时counter=3
 */
 if(counter==2)
  return 1;
 else
  return 0;
}
int main()
{
 int i,j;
 for(i=2;i<10;i++)//根据题意,都是2~9的正整数
  for(j=2;j<10;j++)
  {
   if(i<=j)
   {
    /*
     主要是要经过第二次才能确定出来两数
    */
    if(adjust(i*j,1))
    	if(adjust(i+j,0))
     		printf("%d,%d\n",i,j);
   }
  }
  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -