2016年1月6日
在做题前先感谢各位大神的解法以及思路
编程题#1:数字求和
描述10
解法一:有个不好的习惯就是建立数组,那么这应该就是最笨的方法
#include<iostream> using namespace std; int main() { int a; int b[5] = { 0 }; cin >> a; int tmp = 0; for (int i = 0; i < 5; i++) { cin >> b[i]; if (a>b[i]) tmp += b[i]; } cout << tmp << endl; return 0; }解法二:通过建立临时变量的方法省去数组的使用
#include<iostream> using namespace std; int main() { int a; cin >> a; int tmp, sum = 0;//能不用数组尽量不用数组 for (int i = 0; i < 5; i++) { cin >> tmp; if (tmp<a) sum += tmp; } cout << sum << endl; return 0; }编程题#2:骑车与走路
解法一:直接if..else
#include<iostream> using namespace std; int main() { int n;//待处理事件数目 cin >> n; double tbike, twalk; int tmp=0;//tmp为路程 for (int i = 0; i < n; i++) { cin >> tmp; tbike = (50 + tmp / 3); twalk = (tmp / 1.2); if (tbike>twalk) cout << "Walk" << endl; else if (twalk > tbike) cout << "Bike" << endl; else cout << "All" << endl; } return 0; }解法二:原谅我有数组综合征
#include<iostream> using namespace std; int main() { int n;//待处理事件数目 cin >> n; int tmp[100] = { 0 };//tmp为路程 for (int i = 0; i < n; i++) { cin >> tmp[i]; } for (int i = 0; i < n; i++) { double tbike, twalk; tbike = (50 + tmp[i] / 3); twalk = (tmp[i] / 1.2); if (tbike>twalk) cout << "Walk" << endl; else if (twalk > tbike) cout << "Bike" << endl; else cout << "All" << endl; } return 0; }编程题#3:买房子
这道题由于纠结于一种解法所以花了好多时间,没想到有三种方法;虽然感觉差不多→_→
解法一:说实话,上课的时候有个例子当时讲了使用标志变量flag,当时想着这玩意不会用,结果这么快用上了;思路是过程中进行比较,若为真则将标志位flag置1;貌似这方法很笨
#include<iostream> #include<math.h> using namespace std; int main() { int N; double K;//年薪N,K为比率 while (cin >> N >> K) { int flag = 0; double rate = (100 + K) / 100; for (int i = 0; i < 20; i++) { if ((200 * pow(rate, i)) < N*(i + 1)) { cout << i + 1 << endl; flag = 1; break; } } if ((200 * pow(rate, 20) > N * 20) && (flag == 0)) { cout << "Impossible " << endl; }; } return 0; }解法二:这个方法是从另外一个博主那里copy过来的,可惜是个错误的程序,没有处理好变量的关系,导致花费了很多时间去检查bug,原文中将double price=200放在了循环的外边,但是这么放是不行的;如同使用全局变量一般,这么做会修改变量,产生错误
#include <iostream> using namespace std; int main() { double k;//当K为int型时,k/100在编译器看来就是整形的除法计算会自动向下取整为0 double save;//save为存款,k为每年增长百分率 while (cin >> save >> k) { double price = 200; double saving; if (save >= price) { cout << 1 << endl; continue; } int year = 2; for (; year <= 20; year++) { saving = save*year; price = price*(1 + k / 100); if (price <= saving) { cout << year << endl; break; } } if (year>20) { cout << "Impossible" << endl; } } return 0; }解法三:感谢万能的度娘,这种方法真是太细致了,把所有题目条件都进行了考虑!虽然可能不被KISS原则(Keep It Simple and Stupid)推荐,但是确实很有用
#include<iostream> using namespace std; int main() { float m, n, k, a; while (cin >> n >> k) { a = 200;//从200开始 for (m = 1; !(a<m*n || m>20); m++)//条件是原来的非 { a = a*(1 + k / 100); } if (m>20) cout << "Impossible" << endl; else if (n<10 || n>50) cout << "Impossible" << endl; else if (k<1 || k>20) cout << "Impossible" << endl; else cout << m << endl; } return 0; }
这个太短了应该没什么必要,手残的经常多加变量
方法一:
#include<iostream> using namespace std; int main() { int n; cin >> n; for (int i = 10; i <(n+1); i++) { int b = i % 10; int c = i / 10; if (i % (b + c) == 0) cout << i << endl; } return 0; }方法二:
#include<iostream> using namespace std; int main() { int n; cin >> n; for (int i = 10; i <(n + 1); i++) { if (i % (i % 10 + i / 10) == 0) cout << i << endl; } return 0; }