温馨提示:这篇文章已超过557天没有更新,请注意相关的内容是否还可用!
1. 爬楼梯
树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级 也可以第一次走两级,第二次走一级,一共3种方法。输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30。输出不同的走法数,每一行输入对应一行输出。
样例输入
5
8
10
样例输出
8
34
89
#include <iostream> using namespace std; int zoufa(int n) { if (n <= 2) { return n; } int a = 1, b = 2, c; for (int i = 3; i <= n; i++) { c = a + b; a = b; b = c; } return c; } int main() { int n; while (cin >> n) { int fangshi = zoufa(n); cout << fangshi << endl; } return 0; }
2. 2的幂次方表示
任何一个正整数都可以用2的幂次方表示。例如:137=27+23+20
同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:2(7)+2(3)+2(0)
进一步:7=22+2+20(21用2表示)3=2+20
所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=210+28+25+2+1
所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入一个正整数n(n≤20000)。
输出一行,符合约定的n的0,2表示(在表示中不能有空格)。
样例输入
137
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
#include <iostream> using namespace std; void liupeng(int n) { if (n == 0) { cout << "0"; return; } if (n == 1) { cout << "2(0)"; return; } if (n == 2) { cout << "2"; return; } int liup = 0; while ((1 << liup) <= n) { liup++; } liup--; if (liup == 0) { cout << "2(0)"; } else if (liup == 1) { cout << "2"; } else { cout << "2("; liupeng(liup); cout << ")"; } n -= (1 << liup); if (n > 0) { cout << "+"; liupeng(n); } } int main() { int n; cin >> n; liupeng(n); return 0; }
3. 分数求和
输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。
如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。分子和分母均不为0,也不为负数。输入第一行是一个整数n,表示分数个数,1 <= n <= 10;接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。
输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。
样例输入
2
1/2
1/3
样例输出
5/6
#include <iostream> #include <sstream> #include <vector> #include <algorithm> using namespace std; int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } int lcm(int a, int b) { return (a * b) / gcd(a, b); } string jhfs(int fenzi, int fenmu) { int fenpei = gcd(fenzi, fenmu); fenzi /= fenpei; fenmu /= fenpei; if (fenmu == 1) { return to_string(fenzi); } return to_string(fenzi) + "/" + to_string(fenmu); } string tjxs(vector<string>& xsbf) { int resultfenzi = 0; int resultfenmu = 1; for (const auto& xiaoshu : xsbf) { stringstream ss(xiaoshu); int fenzi, fenmu; char slash; ss >> fenzi >> slash >> fenmu; int lcmValue = lcm(resultfenmu, fenmu); int chengshu1 = lcmValue / resultfenmu; int chengshu2 = lcmValue / fenmu; resultfenzi = (resultfenzi * chengshu1) + (fenzi * chengshu2); resultfenmu = lcmValue; } return jhfs(resultfenzi, resultfenmu); } int main() { int n; cin >> n; vector<string> xsbf(n); for (int i = 0; i < n; i++) { cin >> xsbf[i]; } string result = tjxs(xsbf); cout << result << endl; return 0; }
还没有评论,来说两句吧...