编程题目

1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
None.gif long  fn( long  n) 
None.gif  
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    
long temp=0
InBlock.gif  
InBlock.gif    
int i,flag=1
InBlock.gif  
InBlock.gif    
if(n<=0
InBlock.gif  
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    printf(“error: n must 
> 0); 
InBlock.gif  
InBlock.gif    exit(
1); 
InBlock.gif  
ExpandedSubBlockEnd.gif    }
 
InBlock.gif  
InBlock.gif    
for(i=1;i<=n;i++
InBlock.gif  
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    temp
=temp+flag*i; 
InBlock.gif  
InBlock.gif    flag
=(-1)*flag; 
InBlock.gif  
ExpandedSubBlockEnd.gif    }
 
InBlock.gif  
InBlock.gif    
return temp; 
InBlock.gif  
ExpandedBlockEnd.gif    }
 
None.gif  
None.gif
改进了的方案

None.gif long  fn( long  n) 
None.gif  
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    
long temp=0
InBlock.gif  
InBlock.gif    
int j=1,i=1,flag=1
InBlock.gif  
InBlock.gif    
if(n<=0
InBlock.gif  
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    printf(“error: n must 
> 0); 
InBlock.gif  
InBlock.gif    exit(
1); 
InBlock.gif  
ExpandedSubBlockEnd.gif    }
 
InBlock.gif  
InBlock.gif    
while(j<=n) 
InBlock.gif  
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    temp
=temp+i; 
InBlock.gif  
InBlock.gif    i
=-i; 
InBlock.gif  
InBlock.gif    i
>0?i++:i--
InBlock.gif  
InBlock.gif    j
++
InBlock.gif  
ExpandedSubBlockEnd.gif    }
 
InBlock.gif  
InBlock.gif    
return temp; 
InBlock.gif  
ExpandedBlockEnd.gif    }

None.gif
None.gif
:“不要认为CPU运算速度快就把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做,因为CPU是为用户服务的,不是为我们程序员服务的!”多么精辟的语言

None.gif long  fn( long  n) 
None.gif  
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    
if(n<=0
InBlock.gif  
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif
InBlock.gif  
InBlock.gif    printf(“error: n must 
> 0); 
InBlock.gif  
InBlock.gif    exit(
1); 
InBlock.gif  
ExpandedSubBlockEnd.gif    }
 
InBlock.gif  
InBlock.gif    
if(0==n%2
InBlock.gif  
InBlock.gif    
return (n/2)*(-1); 
InBlock.gif  
InBlock.gif    
else 
InBlock.gif  
InBlock.gif    
return (n/2)*(-1)+n; 
InBlock.gif  
ExpandedBlockEnd.gif    }
 
None.gif
 2). 他要求我用一种技巧性的编程方法来用一个函数实现两个函数的功能n为如:fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6!
  
    fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9! 现在用一个函数fn(int n,int flag)实现,当flag为0时,实现fn1功能,如果flag为1时实现fn2功能!
 定义一个二维数组 float t[2][5]存入{{2!,3!,4!,5!,6!},{5!,6!,7!,8!,9!}}然后给出一个循环:
  
    for(i=0;i<6;i++)
  
    {
  
    temp=temp+n/t[flag];
  
    }
  
    最后得到计算值!呵呵,典型的空间换时间的算法!

转载于:https://www.cnblogs.com/sideandside/archive/2007/04/13/712019.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值