1、漢諾塔
描述:
n個圓盤從下面開始按大小順序擺放在A柱子上。並且規定,任何時候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動一個圓盤,求最少的移動步驟。
A爲存放盤子的塔,B爲輔助塔,C爲目標塔
算法分爲三步
一、將A上n-1個盤子全部放到B塔上
二、將A上剩下的一個盤子放到C塔上
三、將C塔上的盤子全部放到C塔上
注:不需要考慮如何移動n-1個盤子
程序:
#include<iostream>
using namespace std;
void hanoi(int n,char A,char B,char C)
{
if(n==1)
{
cout<<A<<"->"<<C<<endl;
return;//遞歸終止
}
hanoi(n-1,A,C,B);//將n-1個盤子從A移到B
cout<<A<<"->"<<C<<endl;
hanoi(n-1,B,A,C);//將n-1個盤子從B移到C
}
int main()
{
char A='A',B='B',C='C';
int n;
cout<<"請輸入圓盤數量:";
cin>>n;
hanoi(n,A,B,C);
return 0;
}
運行結果
2、輸出99口訣。共9行9列,i控制行,j控制列。
代碼:
#include<iostream>
using namespace std;
int main()
{
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
cout<<i<<"*"<<j<<"="<<i*j<<" ";
}
cout<<endl;
}
return 0;
}
運行結果
3、斐波那契數列問題
問題描述:
有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數爲多少?
兔子的規律爲數列1,1,2,3,5,8,13,21….
代碼:
#include<iostream>
using namespace std;
int main()
{
int f1=1,f2=1,f;
cout<<"第1月兔子數量爲"<<f1<<"對"<<endl;
cout<<"第2月兔子數量爲"<<f2<<"對"<<endl;
for(int i=3;i<=12;i++)
{
f=f2;
f2=f1+f2;
f1=f;
cout<<"第"<<i<<"月兔子數量爲"<<f2<<"對"<<endl;
}
return 0;
}
運行結果:
4、判斷101-200之間有多少個素數,並輸出所有素數及素數的個數。
代碼:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int num=0;//記錄素數個數
cout<<"101-200之間的素數如下:"<<endl;
for(int i=101;i<=200;i++)
{
bool flag=true;//標記是不是素數
/*
判斷是不是素數
判斷素數的方法:
用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數
*/
for(int j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
flag=false;//不是素數
break;
}
}
if(flag)
{
num++;
cout<<i<<endl;
}
}
cout<<"101-200之間共有"<<num<<"個素數"<<endl;
return 0;
}
運行結果 :
5、完數
題目描述:
一個數如果恰好等於小於它的因子之和,這個數就稱爲“完數”。例如6=1+2+3.編程找出1000以內的所有完數。
代碼:
#include<iostream>
using namespace std;
int main()
{
cout<<"1000以內的完數有:"<<endl;
for(int i=1;i<1000;i++)
{
int number=i;
for(int j=1;j<i;j++)
{
if(i%j==0)
{
number-=j;
}
}
if(number==0)
{
cout<<i<<endl;
}
}
return 0;
}
運行結果:
6、編程打印直角楊輝三角形
代碼:
#include<iostream>
using namespace std;
int main(){
int a[20][20],i,j,n;
cout<<"輸入要輸出的行數(<21):";
cin>>n;
//邊緣數值初始化爲1
for(i=0;i<n;i++){
a[i][i]=1;
a[i][0]=1;
}
for(i=1;i<n;i++){
for(j=1;j<i;j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
//輸出直角楊輝三角形
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
運行結果:
7、矩陣旋轉
要求:
將一個4×4的數組進行逆時針旋轉90度後輸出,要求原始數組的數據隨機輸入,新數組以4行4列的方式輸出
代碼:
#include<iostream>
using namespace std;
int main(){
int a[4][4],b[4][4],i,j;
cout<<"請輸入一個4*4的數組:"<<endl;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
cin>>a[i][j];
}
}
for(i=0;i<4;i++){
for(j=0;j<4;j++){
b[i][j]=a[j][3-i];
}
}
cout<<"逆時針旋轉90度後爲:"<<endl;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
運行結果:
8、求平均成績
題目描述:
通過鍵盤輸入3名學生4門課程的成績,分別求每個學生的平均成績和每門課程的平均成績;
要求所有成績均放入一個4行5列的數組中,輸入時同一人數據間用空格,不同人用回車;
其中最後一列和最後一行分別放每個學生的平均成績、每門課程的平均成績及班級總平均分。
代碼:
#include<iostream>
using namespace std;
int main(){
double a[4][5];
int i,j;
//輸入
cout<<"輸入該班3名學生4門課程的成績:"<<endl;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
cin>>a[i][j];
}
}
double sum;
//每個學生的平均成績
for(i=0;i<3;i++){
sum=0;
for(j=0;j<4;j++){
sum+=a[i][j];
}
a[i][4]=sum/4;
}
//每門課程的平均成績及班級總平均分
for(i=0;i<5;i++){
sum=0;
for(j=0;j<3;j++){
sum+=a[j][i];
}
a[3][i]=sum/3;
}
//輸出
cout<<"該班學生成績情況爲如下:"<<endl;
for(i=0;i<4;i++){
for(j=0;j<5;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
運行結果:
9、實現將輸入的字符串反序輸出,如輸入windows 輸出swodniw。
代碼:
#include<iostream>
using namespace std;
int main(){
char c[200],c1;
cout<<"請輸入字符串:";
cin>>c;
int len=strlen(c);//字符串長度
for(int i=0,j=len-1;i<len/2;i++,j--){
c1=c[i];
c[i]=c[j];
c[j]=c1;
}
cout<<"反序後的字符串爲:"<<c<<endl;
return 0;
}
運行結果:
10、從字符數組s中刪除存放在c中的字符
代碼:
#include<iostream>
using namespace std;
int main()
{
char s[80],c;
int i,j;
cout<<"請輸入字符串:";
cin>>s;
cout<<"請輸入要刪除的字符:";
cin>>c;
for(i=0,j=0;s[j]!='\0';j++){
if(s[j]!=c){
s[i++]=s[j];
}
}
s[i]='\0';//字符串結束
cout<<"刪除字符後的字符串爲:"<<s<<endl;
return 0;
}
運行結果:
11、冒泡排序,從小到大,排序後結果輸出到屏幕及文件1.txt
代碼:
#include<iostream>
#include<fstream>
using namespace std;
void fun(int a[],int n){
int temp;
for(int i=1;i<n;i++){
for(int j=0;j<n-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main(){
int a[10]={1,3,6,4,2,9,5,0,7,8},n=10,i;
ofstream mycout;
mycout.open("E:\\1.txt");
//冒泡排序
fun(a,n);
for(i=0;i<n;i++){
cout<<a[i]<<endl;//輸出到屏幕
mycout<<a[i]<<endl;//輸出到文件
}
mycout.close();
return 0;
}
運行結果:
12、輸入一個字符串,判斷其是否爲迴文。迴文字符串是指從左到右讀和從右到左讀完全相同的字符串。
代碼:
#include<iostream>
using namespace std;
int main(){
char s[50];
int i,j;
cout<<"請輸入一個字符串:";
cin>>s;
int len=strlen(s);
for(i=0,j=len-1;i<j;i++,j--){
if(s[i]!=s[j]){
break;
}
}
if(i>=j){
cout<<s<<"是迴文串!"<<endl;
}else{
cout<<s<<"不是迴文串!"<<endl;
}
return 0;
}
運行結果: