題目描述:
求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);
}
}
}