一道校招编程题
程序员文章站
2022-03-09 16:08:49
...
未经优化的代码:
思路:
暴力法,1 2 2 3 3 3 4 4 4 4…使用一个变量m控制是往后的几天,接着在这几天里并且天数不超过指定天数的情况下,执行while循环,当跳出循环时,判断是不是因为天数够了跳出,如果是终止for循环,打印结果。sum中存储结果
#include<iostream>
#include<stdlib.h>
using namespace std;
int main() {
int n;
cin >> n;
int count = 0;//记录第几天
int sum = 0;//第n天时的数
for (int m = 1;; ++m) {
int i = 0;
while (i++ < m && count++ < n) {
sum += m;
}
if (count == n) {
break;
}
}
cout << sum << endl;
return 0;
}
优化后的代码(但代码结构未优化):
思路:借助数学归纳,总结规律
#include<iostream>
#include<stdlib.h>
using namespace std;
int main() {
int sum = 0;//结果
int count = 0;
int n;
cin >> n;
for (int i = 1; ; ++i) {
count += i;
if (count <= n) {
sum += i * i;
if (count == n) {
break;
}
}
else {
sum += i * (count - n);
break;
}
}
cout << sum << endl;
return 0;
}