找硬币: /* 假设有 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; }