趣味算法
A. C++ 关于趣味取球的算法
给,已经编译运行确认:
#include <iostream>
#include <time.h>
using namespace std;
enum Ball
{
white,
black
};
int main(int argc, char *argv[])
{
//定义袋中黑白球的数目
int BlackNum;
int WhiteNum;
//由用户指定袋中的黑白球数目
cout << "请输入袋中白球的数目" << endl;
cin >> WhiteNum;
cout << "请输入袋中黑球的数目" << endl;
cin >> BlackNum;
//初始化随机数种子
srand((unsigned)time(NULL));
int times = 0; //取球的次数
while ((BlackNum + WhiteNum) > 1)
{
++times;
int FirstBall;
int SecondBall;
//每次取得的第一个和第二个球
if (WhiteNum == 0) //袋中已没有白球,则只能取黑球
{
FirstBall = black;
cout << "第 " << times << "次取出的第一个球为黑色" << endl;
--BlackNum;
}
else if (BlackNum == 0)//袋中已没有黑球
{
FirstBall = white;
cout << "第 " << times << "次取出的第一个球为白色" << endl;
--WhiteNum;
}
else //否则随机取得一个球
{
FirstBall = rand() % 2;
if (FirstBall == white)
{
cout << "第 " << times << "次取出的第一个球为白色" << endl;
--WhiteNum;
}
else
{
cout << "第 " << times << "次取出的第一个球为黑色" << endl;
--BlackNum;
}
}
if (WhiteNum == 0) //袋中已没有白球,则只能取黑球
{
SecondBall = black;
cout << "第 " << times << "次取出的第一个球为黑色" << endl;
--BlackNum;
}
else if (BlackNum == 0)//袋中已没有黑球
{
SecondBall = white;
cout << "第 " << times << "次取出的第一个球为白色" << endl;
--WhiteNum;
}
else
{
SecondBall = rand() % 2;
if (FirstBall == white)
{
cout << "第 " << times << "次取出的第二个球为白色" << endl;
--WhiteNum;
}
else
{
cout << "第 " << times << "次取出的第二个球为黑色" << endl;
--BlackNum;
}
}
//根据取出的两个球的颜色是否相等来觉得是放黑球进去还是白球进去
if (FirstBall == SecondBall)
{
++WhiteNum;
}
else
{
++BlackNum;
}
}
if (WhiteNum == 1)
{
cout << "最后一个球为白球" << endl;
}
else
cout << "最后一个球为黑球" << endl;
system("pause");
}
B. 趣味数学
题目的算法,就是忽悠。。。
每人实际拿出来9元
3人一共:9×3=27元
这27元,老板收了25元,服务员藏了2元
25+2=27正好
为什么要用27+2=29?
这个算式毫无道理
C. 趣味编程
先定义一个数组,存储原来的数据,从数组的第一位开始,每拿掉一张,就把该位置零,下一位与最后一位掉换,其余位向前覆盖,直到直剩一张为止.
#include <stdio.h>
void main()
{
int a[100];//定义数组
int i,m,n,j,temp;
printf("Enter n:");//输入有多少张
scanf("%d",&n);
if(n==1) printf("the last is:1");//1张2张就直接给出来了
else if(n==2) printf("the last is:2");
else
{
for(i=0;i<n;i++)
{
a[i]=i+1;printf("%3d ",a[i]);//给数组赋值,就相当于编号了
}
printf("\n");
i=0;
do
{
a[i]=0;//拿掉一张,该位置就空了,置为0;
j=i+1;
while(j<n-1)//后位进一,空位的下一位移到最后
{
if(j==i+1) temp=a[j];
a[j]=a[j+1];
if(j==n-2) a[j+1]=temp;
j++;
}
if(a[n-2]==0) break;//还剩一张了
i++;
for(m=0;m<n;m++)//这个循环语句是用来观察每一步,以验证结果
{
if(a[m]==0) continue;
printf("%3d ",a[m]);
}
printf("\n");
}while(1);
printf("The last is:%d\n",a[n-1]);//最后一张的编号
}
}
用TC2.0编译通过,希望能帮到你.
D. 求数学趣味小知识
九九歌
九九歌就是我们现在使用的乘法口诀。
远在公元前的春秋战国时代,九九歌就已经被人们广泛使用。在当时的许多着作中,都有关于九九歌的记载。最初的九九歌是从"九九八十一"起到"二二如四"止,共36句。因为是从"九九八十一"开始,所以取名九九歌。大约在公元五至十世纪间,九九歌才扩充到"一一如一"。大约在公元十三、十四世纪,九九歌的顺序才变成和现在所用的一样,从"一一如一"起到"九九八十一"止。
现在我国使用的乘法口诀有两种,一种是45句的,通常称为"小九九";还有一种是81句的,通常称为"大九九"。
阿拉伯数字
在生活中,我们经常会用到0、1、2、3、4、5、6、7、8、9这些数字。那么你知道这些数字是谁发明的吗?
这些数字符号原来是古代印度人发明的,后来传到阿拉伯,又从阿拉伯传到欧洲,欧洲人误以为是阿拉伯人发明的,就把它们叫做"阿拉伯数字",因为流传了许多年,人们叫得顺口,所以至今人们仍然将错就错,把这些古代印度人发明的数字符号叫做阿拉伯数字。
现在,阿拉伯数字已成了全世界通用的数字符
E. 趣味数学题
在老板的手里吧
F. 趣味智力题,有兴趣的来,求讨论...
1,3人付了27元 =服务员2元+老板25元
2.开始一斤葱是一元一斤 后来分开卖应是平均一斤1元 而卖葱卖的是(0.7+0.3)/2=0.5斤所以卖了50元
3蜗牛爬到井口就不滑下了 所以 蜗牛爬到第五天 第五天还没开始爬时是爬了(3-2)*4=4米距离井口刚好3米所以爬五天就够了
4.15个 先买10个吃了就有10个桃核 然后2个桃核换1个桃再把换的这个桃的桃核给他就是3换1 j就是 10+10/2=15个
5 12个乒乓球放天平两边各6个 拿着重的一边的6个平分再次放天平两端(另外的6个淘汰) 再拿重的一边的3个(同前) 挑两个分开一边一个放天平上 如果天平倾斜重的一个就是 如果平衡 剩下的一个就是重的
6假设出沙漠时有1000根萝卜,那么在出沙漠之前一定不只1000根,那么至少要驮两次才会出沙漠,那样从出发地到沙漠边缘都会有往返的里程,那所走的路程将大于3000公里,故最后能卖出萝卜的数量一定是小于1000根的。
那么在走到某一个位置的时候萝卜的总数会恰好是1000根。
因为驴每次最多驮1000,那么为了最大的利用驴,第一次卸下的地点应该是使萝卜的数量为2000的地点。
因为一开始有3000萝卜,驴必须要驮三次,设驴走X公里第一次卸下萝卜
则:5X=1000(吃萝卜的数量,也等于所行走的公里数)
X=200,也就是说第一次只走200公里
验算:驴驮1000根走200公里时剩800根,卸下600根,返回出发地
前两次就囤积了1200根,第三次不用返回则剩800根,则总共是2000根萝卜了。
第二次驴只需要驮两次,设驴走Y公里第二次卸下萝卜
则:3Y=1000, Y=333.3
验算:驴驮1000根走333.3公里时剩667根,卸下334根,返回第一次卸萝卜地点
第二次在途中会吃掉334根萝卜,到第二次卸萝卜地点是加上卸下的334根,刚好是1000根。
而此时总共走了:200+333.3=533.3公里,而剩下的466.7公里只需要吃466根萝卜
所以可以卖萝卜的数量就是1000-466=534
第6题不会网络复制的
G. 趣味计算
设有钢笔x只,圆珠笔y只,铅笔z只。
x+y+z=100,10x+3y+0.5z=100,
如果全买钢笔,则能买十只,如果全买圆珠笔能买33只,全买铅笔能买50只,但这是不可能的。x小于等于10,y小于等于33,z小于等于50。将x用一到十之间的数代换一下,保证y小于等于33,z小于等于50,且是整数就OK了
H. 趣味数学的加减乘除~~
很佩服你能自己钻研这些。
这个结论是可以用数学归纳法来证明的,不知道你现在几年级,在高中会学的。
先更正一下你结论里的第一条(你将n+1当作n了):
最后一次运算为加法时设最后加的一个数为(4n-2)则答案应为3.2n-1.2;
下面开始证明
首先对n=1时:
加到4n-2=2时,得数为2,满足3.2n-1.2;
减到4n-1=3得数为-1,满足-(0.2+0.8n);
乘到4n=4得数为-4,满足-(0.8n+3.2n平方);
除到4n+1=5得数为-0.8,满足-0.8n
假设对n=k时这4个式子都成立,那么当n=k+1时,有
加到4(k+1)-2=4k+2时,得
-0.8k+4k+2=3.2k+2=3.2(k+1)-1.2,第一式仍成立;
减到4(k+1)-1=4k+3时,得
3.2k+2-(4k+3)=-0.8k-1=-0.8k-0.8-0.2=-[0.2+0.8(k+1)],第二式仍成立;
乘到4(k+1)时,得
-[0.2+0.8(k+1)]*4(k+1)=-[0.8+3.2(k+1)]*(k+1)=-[0.8(k+1)+3.2(k+1)平方],第三式仍成立;
除到4(k+1)+1=4k+5时,得
-[0.8+3.2(k+1)]*(k+1)/(4k+5)=-[0.8(4k+5)]*(k+1)/(4k+5)=-0.8(k+1),第四式仍成立。
也就是说n=k+1时,上述四式均仍成立,从而证明了对任意自然数n,这四式恒成立。
证明完毕。
I. 数学典故、图形、趣味计算、小知识【1至5年级已学知识和课外知识】
抽屉原理的应用
1947年,匈牙利数学家把这一原理引进到中学生数学竞赛中,当年匈牙利全国数学竞赛有一道这样的试题:“证明在任何六个人中,一定可以找到三个互相认识的人,或者三个互不认识的人。”
这个问题乍看起来,似乎令人匪夷所思。但如果你懂得抽屉原理,要证明这个问题是十分简单的。我们用A、B、C、D、E、F代表六个人,从中随便找一个,例如A吧,把其余五个人放到“与A认识”和“与A不认识”两个“抽屉”里去,根据抽屉原理,至少有一个抽屉里有三个人。不妨假定在“与A认识”的抽屉里有三个人,他们是B、C、D。如果B、C、D三人互不认识,那么我们就找到了三个互不认识的人;如果B、C、D三人中有两个互相认识,例如B与C认识,那么,A、B、C就是三个互相认识的人。不管哪种情况,本题的结论都是成立的。
由于这个试题的形式新颖,解法巧妙,很快就在全世界广泛流传,使不少人知道了这一原理。其实,抽屉原理不仅在数学中有用,在现实生活中也到处在起作用,如招生录取、就业安排、资源分配、职称评定等等,都不难看到抽屉原理的作用。
兔同笼
你以前听说过“鸡兔同笼”问题吗?这个问题,是我国古代着名趣题之一。大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:“今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。求笼中各有几只鸡和兔?
你会解答这个问题吗?你想知道《孙子算经》中是如何解答这个问题的吗?
解答思路是这样的:假如砍去每只鸡、每只兔一半的脚,则每只鸡就变成了“独角鸡”,每只兔就变成了“双脚兔”。这样,(1)鸡和兔的脚的总数就由94只变成了47只;(2)如果笼子里有一只兔子,则脚的总数就比头的总数多1。因此,脚的总只数47与总头数35的差,就是兔子的只数,即47-35=12(只)。显然,鸡的只数就是35-12=23(只)了。
这一思路新颖而奇特,其“砍足法”也令古今中外数学家赞叹不已。这种思维方法叫化归法。化归法就是在解决问题时,先不对问题采取直接的分析,而是将题中的条件或问题进行变形,使之转化,直到最终把它归成某个已经解决的问题。
普乔柯趣题
普乔柯是原苏联着名的数学家。1951年写成《小学数学教学法》一书。这本书中有下面一道有趣的题。
商店里三天共卖出1026米布。第二天卖出的是第一天的2倍;第三天卖出的是第二天的3倍。求三天各卖出多少米布?
这道题可以这样想:把第一天卖出布的米数看作1份。就可以画出下面的线段图:
第一天为1份;第二天为第一天的2倍;第三天为第二天的3倍,也就是第一天的2×3倍。
列综合算式可求出第一天卖布的米数:
1026÷(l+2+6)=1026÷9=114(米)
而 114×2=228(米)
228×3=684(米)
所以三天卖的布分别是:114米、228米、684米。
请你接这种方法做一道题。
有四人捐款救灾。乙捐款为甲的2倍,丙捐款为乙的3倍,丁捐款为丙的4倍。他们共捐款132元。求四人各捐款多少元?
鬼谷算
我国汉代有位大将,名叫韩信。他每次集合部队,只要求部下先后按l~3、1~5、1~7报数,然后再报告一下各队每次报数的余数,他就知道到了多少人。他的这种巧妙算法,人们称为鬼谷算,也叫隔墙算,或称为韩信点兵,外国人还称它为“中国剩余定理”。到了明代,数学家程大位用诗歌概括了这一算法,他写道:
三人同行七十稀,五树梅花廿一枝,
七子团圆月正半,除百零五便得知。
这首诗的意思是:用3除所得的余数乘上70,加上用5除所得余数乘以21,再加上用7除所得的余数乘上15,结果大于105就减去105的倍数,这样就知道所求的数了。
比如,一篮鸡蛋,三个三个地数余1,五个五个地数余2,七个七个地数余3,篮子里有鸡蛋一定是52个。算式是:
1×70+2×21+3×15=157
157-105=52(个)
请你根据这一算法计算下面的题目。
新华小学订了若干张《中国少年报》,如果三张三张地数,余数为1张;五张五张地数,余数为2张;七张七张地数,余数为2张。新华小学订了多少张《中国少年报》呢?
采纳一下啦~~~我要提高采纳率啊 ~~~拜托拜托~~~~
J. 趣味C语言小编程
题眼就是求出2~10的最小公倍数,然后减一。
模拟排队的算法是可行的,但不是最优的。
#include <stdio.h>
int od(int x,int n) //x是否能被n整除,是返回1,否返回0
{
if (x%n) return 0;
return 1;
}
int gbs(int a[],int n) //求a[n]内所有元素的最小公倍数
{
int i,j,k,o,m=0;
int b[20],c[100];
for (i=0;i<n;i++)
{
if(m<a[i]) m=a[i];
b[i]=a[i];
}
j=2; o=0;
while (j<=m)
{
k=0;
for (i=0;i<n;i++){
if (od(b[i],j)) k++;
if (k>1) break;
}
if(k>1)
{
c[o++]=j;
for (i=0;i<n;i++)
if (od(b[i],j)) b[i]=b[i]/j;
m=0;
for (i=0;i<n;i++)
if(m<b[i]) m=b[i];
}
else
j++;
}
k=1;
for(i=0;i<o;i++)
{
k*=c[i];
}
for (i=0;i<n;i++)
{
k*=b[i];
}
return k;
}
main()
{
int a[10];
for(int i=1;i<=10;i++)
a[i-1]=i;
printf("count=%d\n",gbs(a,10)-1);
getchar();
return 0;
}