找硬币:
/*
假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 N 元(5<N<100),问如何组合才能使硬币的数量最少?
*/
#include<iostream>
using namespace std;
int min_(int x, int y, int z)
{
if(x<=y && x<=z)
return x;
if(y<=x && y<=z)
return y;
if(z<=y && z<=x)
return z;
}
int arr[100];
int main()
{
arr[0]=1;
arr[1]=2;
arr[2]=1;
arr[3]=2;
arr[4]=1;
int N;
cin>>N;
for(int i=5;i<N;i++)
arr[i]=min_(arr[i-1]+1,arr[i-3]+1,arr[i-5]+1);
cout<<arr[N-1];
return 0;
}
39级台阶【蓝桥杯真题】:
///*
//4. 第39级台阶
//【问题描述】
//
//小明刚刚看完电影《第39级台阶》。离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
//站在台阶前,他突然又想着一个问题:
//如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
//请你利用计算机的优势,帮助小明寻找答案。
//*/
//
#include<iostream>
using namespace std;
int j[45];
int o[45];
int main()
{
j[1]=1;
j[2]=1;
o[1]=0;
o[2]=1;
for(int i=3; i<=39; i++)
{
j[i]=o[i-1]+o[i-2];
o[i]=j[i-1]+j[i-2];
}
cout<<o[39];
return 0;
}