?? ch3.cpp
字號:
#include<iostream>
using namespace std;
void change(int num,int n)
{
if(num!=0)
{
int k=num%n;
change(num/n,n);
cout<< k<<" ";
}
}
int Fib(int num)
{
if(num==1 || num==2) return 1;
else
return Fib(num-1)+Fib(num-2);
}
int Triangle(int i,int j)
{
if(j==1) return 1;
else if(i==1) return 0;
else return Triangle(i-1,j-1)+Triangle(i-1,j);
}
int gun(int n, int m) //計算n發打中m環有多少種可能
{
int fn=0,i;
//一發只能打中0~10環,n發則能打中0~10*n環。
if(m<0||m>10*n) return 0;
//一發打中m(0<=m<=10)環只有一種可能。
if(n==1) return 1;
//以上兩句為函數出口,下面的循環為函數的遞歸體。
//如果第一發打中1環,則后(n-1)發應打中(m-1)環
//如果第一發打中2環,則后(n-1)發應打中(m-2)環
//...
//如果第一發打中10環,則后(n-1)發應打中(m-10)環
//綜上,n發打中m環的可能性為:
// fn=f(n-1,m-1)+f(n-1,m-2)+...+f(n-1,m-10)
for(i=0;i<=10;i++)
fn+=gun(n-1,m-i);
return fn;
}
int Array(int n)
{
if(n==1 ) return 1;
else return n*Array(n-1);
}
void main()
{
int which;
while(1)
{
cout<<"進制轉換 --------1"<<endl;
cout<<"Fibonacci--------2"<<endl;
cout<<"楊輝三角形-------3"<<endl;
cout<<"打槍問題---------4"<<endl;
cout<<"1~n的全排列------5"<<endl;
cout<<"GRAY -----------6"<<endl;
cout<<"退出 ------------0"<<endl;
cout<<"請選吧"<<endl;
cin>>which;
switch(which)
{
case 1:
{ int num1,n;
cout<<"輸入要轉換的數:";
cin>>num1;
cout<<"要轉成幾進制?";
cin>>n;
change(num1,n);
cout<<endl;
break;
}
case 2:
{ int num2;
cout<<"想知道Fibonacci數列到第幾個數?";
cin>>num2;
for(int i=1;i<=num2;i++)
cout<<Fib(i)<<" ";
cout<<endl;
break;
}
case 3:
{ int num3;
int i,j;
cout<<"請輸入階數:";
cin>>num3;
for(i=1;i<=num3;i++)
{
for(j=1;j<=i;j++)
cout<<Triangle(i,j);
cout<<endl;
}
break;
}
case 4:
{
cout<<"一個射擊運動員打靶,靶一共有10環,連開10槍打中90環的可能性有多少種?"<<endl;
cout<<"共有"<<gun(10,90)<<"種可能性."<<endl;
break;
}
case 5:
{ int num4;
cout<<"此程序能做1~n 的全排列 輸入 n :";
cin>>num4;
cout<<"共有"<<Array(num4)<<"種可能性"<<endl;
break;
}
case 6:
// gray();break;
case 0:
exit(0);break;
}
}
}
double derive(int n,double i)
{
if(n==1&&i==1)
return 0;
else if(n==1&&i==2)
return 1;
else if(i>pow(2,n-1))
return derive(n-1,pow(2,n)-i+1)+pow(2,n-1);
else
return derive(n-1,i);
}
void convert(int n,double i)
{
int left;
for(int time=1;time{
left=i-((int)(i/2))*2;
i=(int)(i/2);
cout<}
cout<}
int main(int argc, char* argv[])
{
int n;
cout<<"輸入一個整數(格雷碼的位數):";
cin>>n;
double i;
for(i=1;i{
convert(n,derive(n,i));
}
getchar();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -