剑指offer 求1+2+3+...+n,要求不能使用乘除法循环语句等

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27964027

题目描述:

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

输入:

输入可能包含多个测试样例。
对于每个测试案例,输入为一个整数n(1<= n<=100000)。

输出:

对应每个测试案例,
输出1+2+3+…+n的值。

样例输入:
3
5
样例输出:
6
15
    这道题目确实很无聊,试着用java语言,构造方法来写,最后实在没办法,还是要用for,构造了对象数组是不假,但是那个人家调用的是创建数组引用对象的构造函数,还要实例化数组中的对象n次才行,又逼着我用for循环,这也罢了,测试结果超时了,关键是每个测试用例的时间没有超时,但是总时间超时了。


    不想再在这种无聊的题目上浪费时间了,索性这样了,有段时间没用java了,手都生了,另外,用java构造函数思路做本题目,有不用for循环即可计算出答案的,欢迎提示,实在不想去想了!

    无论怎样,还是把代码贴上吧!

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. import java.util.*;  
  2. public class Main{  
  3.     public static void main(String args[]) {  
  4.         Scanner cin = new Scanner(System.in);  
  5.         int n;  
  6.         while (cin.hasNext()) {  
  7.             n = cin.nextInt();   
  8.             Temp.Reset();  
  9.             Temp arr[] = new Temp[n];  
  10.             for(int i=0;i<n;i++)  
  11.                 arr[i] = new Temp();  
  12.             System.out.println(Temp.getSum());  
  13.         }  
  14.     }  
  15. }  
  16.   
  17. class Temp{  
  18.     private static int n = 0;  
  19.     private static int sum = 0;   
  20.     public static void Reset(){  
  21.         n = 0;  
  22.         sum = 0;  
  23.     }  
  24.     public Temp(){  
  25.         ++n;  
  26.         sum += n;  
  27.     }  
  28.     public static int getSum(){  
  29.         return sum;  
  30.     }  
以上是转载,下面是个人根据别人评价部分的代码做的测试和修改,测试通过。


#include <iostream>
using namespace std;
int i,num;
unsigned long r;
int other();
int mul();
int (*func[2])(void)={other,mul};
//int (*fun[2])(void)={others,mul};
class Gauss
{
	static int idx;
	static int sum;
public:
	Gauss()
	{
		idx++;
		sum += idx;
	}
	void say(void)
	{
		cout<<"Count = "<<idx<<", Sum = "<<sum<<endl;
	}
};

int Gauss::idx = 0;
int Gauss::sum = 0;

int main(void)
{
	Gauss * p = new Gauss[10];
	p->say();
	delete [] p;
	i=6;
	r=0;
	mul();
	printf(" r = %d \n",r);
	return 0;
}

int other()
{
	return 0;
}
int mul()
{
	i--;
	int tmp=i;
	func[(int)(i!=0)]();
	r+=tmp;
	printf(" r = %d i=%d\n",r,i);
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值