n个鸡蛋,一次拿2个多一个,一次拿3个少1个,4个多一个,5个少1个,6个多1个,7个少1个.求n?我换个说法吧:一次拿2个多1个,一次拿3个多2个,4个多1个,5个多4个,6个多1个,7个多6个,4楼的你再帮我跑多会吧,

问题描述:

n个鸡蛋,一次拿2个多一个,一次拿3个少1个,4个多一个,5个少1个,6个多1个,7个少1个.求n?
我换个说法吧:一次拿2个多1个,一次拿3个多2个,4个多1个,5个多4个,6个多1个,7个多6个,4楼的你再帮我跑多会吧,

  希望LZ没有写错字
  观察到2,4,6都是拿完后多一个,则n-1=12x,即n-1肯定是12的倍数,12是2,4,6的最小公倍数.
  同样3,5,7,我们得到n+1=105y.
  然后我们知道n=12x+1,n=105y-1,→12x+1=105y-1,→y=(12x+2)/105.
  这是一个二元一次方程.
  根据lz所给的条件,x,y肯定是整数,这是个好消息,可以给x赋不同的值,尝试让y等于一个整数,然后就能得到n.
  本人试着用c编个简单程序
  开始用的长整型,结果溢出,后来用的是超长整型.
  ####################################
  # 结果我是算不出答案 #
  ####################################
  以下是c代码:
  测试环境:
  cpu:p8700
  操作系统:winxp
  软件:dev-c++
  -----------------------------------------------------------------------------------------------------------------------
  #include
  #include
  #include
  main()
  {
  long long y,x,n;
  printf("n个鸡蛋\n");
  printf("每次拿2个多1个\n每次拿3个少1个\n");
  printf("每次拿4个多1个\n每次拿5个少1个\n");
  printf("每次拿6个多1个\n每次拿7个少1个\n");
  printf("猜我们有多少鸡蛋\n");
  system("pause");
  for (x=1;x>0;x++)
  {
  y=(12*x-2)%105;
  printf("x= %d",x);
  printf(" ");
  printf("y= %d\n",y);
  if(y ==0)
  break;
  }
  printf("哦,我们算出鸡蛋的数量用****n***来表示\n");
  //printf("x = %d\n",x);
  y = (12*x-2)/105;
  //printf("y = %d\n",y);
  n= 105*y - 1;
  printf("n = %d\n",n);
  system("pause");
  }
  这个东西跑了至少20分钟,没结果.