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分钟,没结果.