母牛的故事
#include<bits/stdc++.h>
using namespace std;
const int N=55;
int main()
{
int n,i;
int num[N]={0,1,2,3,4};
for(i=5;i<55;i++)
num[i]=num[i-1]+num[i-3];
while(cin>>n&&n!=0)
{
cout<<num[n]<<endl;
}
return 0;
}
奖励(award)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[100000],s=5;
cin>>n;
a[1]=2;
a[2]=3;
for(int i=3;i<=n;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[i]>100)
a[i]=a[i]%10;
s+=a[i];
}
cout<<s;
return 0;
}
汉诺塔问题1
#include<bits/stdc++.h>
using namespace std;
int k=0,n;
void h(int n,char a,char c,char b)
{
if(n==0) return;
h(n-1,a,b,c);
k++;
h(n-1,b,c,a);
}
int main()
{
int n;
cin>>n;
h(n,'a','c','b');
cout<<k;
return 0;
}
汉诺塔问题2
#include<bits/stdc++.h>
using namespace std;
int k=0,n;
void h(int n,char a,char c,char b)
{
if(n==0) return;
h(n-1,a,b,c);
k++;
printf("%d :from %c-->%c\n",k,a,c);
h(n-1,b,c,a);
}
int main()
{
int n;
cin>>n;
h(n,'a','c','b');
return 0;
}
过河卒
#include<iostream>
#include<algorithm>
using namespace std;
long long dp[30][30];
int m_x[8]={-2,-2,-1,-1,1,1,2,2},m_y[8]={1,-1,2,-2,2,-2,1,-1};//马跳的坐标变化
int main(){
int n,m,x,y;
cin>>n>>m>>x>>y;
n+=1;m+=1;x+=1;y+=1;//整体空出一行一列,便于边界检查
for(int i=0;i<8;i++){
if((x+m_x[i]>=1 && x+m_x[i]<=n) && (y+m_y[i]>=1 && y+m_y[i]<=m))
dp[x+m_x[i]][y+m_y[i]]=-1;
}
dp[1][0]=1;
dp[x][y]=-1;//马所在的点也不能走
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(dp[i][j]==-1)
dp[i][j]=0;
else{
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
}
cout<<dp[n][m];
return 0;
}
本文通过几个具体的编程实例,展示了如何使用C++解决一系列经典算法问题,包括母牛繁殖数列、汉诺塔问题及骑士周游问题等。通过对这些算法的具体实现,读者可以更好地理解递归、动态规划等核心概念。
2万+

被折叠的 条评论
为什么被折叠?



