Chinaunix首页 | 论坛 | 博客
  • 博客访问: 46898
  • 博文数量: 14
  • 博客积分: 1485
  • 博客等级: 上尉
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-13 15:44
文章分类

全部博文(14)

文章存档

2012年(1)

2011年(2)

2010年(3)

2009年(8)

我的朋友

分类:

2009-12-14 20:28:45

在一张纸上写有94个自然数:1、2、3、4、5、6、7……、93、94。
  划去最前面两个数1、2,而将他们的和3写在最后面,成为:3、4、5、6、7、……、94、3。
  然后再划去最前面两个数3、4,而将他们的和7写在后面,成为:5、6、7、……、94、3、7。
  同理继续,得:7、……、94、3、7、11。
  这样一直进行下去,直到剩下最后一个数为止,求写出的所有数(包括最初的94个数)的和是多少?

答案:94 * 94 * (1+94)/2 = 4465*94 = 41970

#include

int MachCount(int *pnInts, int *pnCount)
{
 int i;
 int nSum = 0;

 if(*pnCount > 1)
 {
  int nSum1;

  for(i=0; i<*pnCount; i++)
   nSum += pnInts[i];

  nSum1 = pnInts[0] + pnInts[1];

  for(i=0; i<*pnCount-2; i++)
   pnInts[i] = pnInts[i+2];
  
  pnInts[i] = nSum1;

  if(2 == *pnCount)
   *pnCount = 1;

  else
   *pnCount = i+1;

  return nSum;
 }

 else if(1 == *pnCount)
 {
  *pnCount = 0;
  return pnInts[0];
 }


 return -1;
}

int main()
{
 int i;
 int nRet;
 int nSum = 0;
 int nCount = 94;
 int nInts[94];
 
 for(i=0; i  nInts[i] = i+1;

 while(1)
 {
  for(i=0; i   printf("%-4d, ", nInts[i]);

  nRet = MachCount(nInts, &nCount);
  if(nRet < 0)
   break;

  nSum += nRet;

  printf("Ret=%d, Sum=%d\n", nRet, nSum);
 }

 printf("sum=%d\n", nSum);

 return 0;
}

 

 

阅读(879) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~