天天看點

《劍指Offer》面試題:1+2+3+...+n

題目描述:

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。

思路:

每個人對這個題目都比較熟悉,也都會求解。每個人能夠想到的方法有

1)遞歸

2)循環累加求和。

3)直接用等差數列求和公式

但是,由于題目限制了,不能 使用乘除法、循環等要求,是以不能直接使用上面的方法。

雖然這個題目看起來很簡單,但是當加入了這麼的限制條件之後,這個題目的解題思路就需要想點辦法了。

思路一:遞歸實作,不能是有if、else

#include <stdio.h>
int sum1ToN(int n){
int result=;
n&&(result=n+sum1ToN(n-));//這裡就避免了使用if來判斷
return result;
}

int main(){
printf("%d\n",sum1ToN());
return ;
}
           

思路二:利用函數調用自己本身并利用全局變量來完成累加求和。

/*

輸入:
輸入可能包含多個測試樣例。
對于每個測試案例,輸入為一個整數n(1<= n<=100000)。
輸出:
對應每個測試案例,
輸出1+2+3+…+n的值。
樣例輸入:
3
5
樣例輸出:
6
15
*/
/

#include<stdio.h>
#include<stdlib.h>

int n=;
int result=;
int funReturnResult(int );
int  sum1ToN(int );
int (*fun[])(int)={funReturnResult,sum1ToN};
int funReturnResult(int n){
    return result;
}
int  sum1ToN(int n){
    result+=n;
    n--;
    fun[int(n!=)](n);//即當i=0時傳回0,調用函數結束,否則則調用自己本身 
}
int main(void){
    while(scanf("%d",&n)!=EOF&&n>){
        result=;
        int res=sum1ToN(n);
        if(res>){
            printf("%d\n",res);
        }
    }
}