标题:连续奇数和
小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和。比如:
2^3 = 8 = 3 + 5
3^3 = 27 = 7 + 9 + 11
4^3 = 64 = 1 + 3 + ... + 15
虽然他没有想出怎么证明,但他想通过计算机进行验证。
请你帮助小明写出 111 的立方之连续奇数和表示法的起始数字。如果有多个表示方案,选择起始数字小的方案。
普通循环:
#include<iostream>
using namespace std;
int t = 111 * 111 * 111;
int main() {
int flag = 0;
for(int i = 1;i <= t; i+=2) { //起点
int sum = i, p = i;//sum初始化为起点值,以及p记录当前项的值
while(sum < t) {
p += 2;//连续奇数,p逐项+2
sum += p;
if(sum == t) flag = 1;//加完之后刚好等于t
}
if(flag) {
cout << i << endl;
break;
}
}
return 0;
}
带返回值的dfs:
#include<iostream>
using namespace std;
int t = 111 * 111 * 111;
int dfs(int k, int sum) {
int flag = 0;
if(sum > t) return 0;
if(sum == t) return 1;
flag = dfs(k+2, sum+k+2);
if(flag) return 1;//一定要判断每一次dfs的返回值,且这里的dfs是有返回值的,所以必须要访问到返回值不能直接调用
return 0;
}
int main() {
int flag = 0;
for(int i = 1;i <= t; i+=2) { //起点
flag = dfs(i, i);
if(flag) {
cout << i << endl;
break;
}
}
return 0;
}
答案:371