编程之美 2.21 只考加法的面试题
任意给一个正整数N,写出N可以表示成连续自然数加和的所有可能。。
比如,输入整数253.
253=126+127
253=18+19+。。+28
253=1+2+。。22
经分析,
i为奇数时候,if(N%i)==0,则N可以写成连续i个数相加
i为偶数时候,if(N%i)==i/2,则N可以写成连续i个数相加。
代码如下:
#include "stdafx.h" #include<iostream> #include<stdio.h> #include<malloc.h> #include"myheader.h" using namespace std; //BOP 2.21 void ContinuePlus(int num) { for(int i=2;i<num/2;i++) { if( i % 2 == 1 && num%i == 0) { if(num/i-i/2>0) { cout<<(num/i-i/2)<<" ~ "<<(num/i+i/2)<<endl; } } if( i % 2 == 0 && num%i == i/2) { if(num/i-i/2+1>0) { cout<<(num/i-i/2+1)<<" ~ "<<(num/i+i/2)<<endl; } } } } void main() { ContinuePlus(253);//参数输入整数N }
问题2:
2^N不行,根据上面的性质。
问题3:…还没懂,囧