趣味演算法
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;
}