文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>1 2 5三个数相加等于1000,共有多少种情况

1 2 5三个数相加等于1000,共有多少种情况

时间:2009-08-17  来源:ubuntuer

1  2  5三个数相加等于1000,共有多少种情况?
要求行数。

写了一个三行的

for(i=1;i<500;i++)
  for(j=1;j<200;j++)
    if((i*2+j*5)<1000)count++;

面试官说可以两行实现,请各位高手指点指点!
  这样是我的第一反应: for(i=1;i<500;i++)
  for(j=1;j<200&&(i*2+j*5)<1000;j++)
    count++;
  可惜不对,结果算算任意一个数有1,2构成的个数...,我这里是1,2必须出现一次,1,2可以不出现又有点不同,大家可以推导下,过程类似:     1 --- 0   2 --- 0   3 --- 1   4 --- 1   5 --- 2   不写了(n-1)/2最后的结果      验证下,下面的程序有些许的意淫的技巧,大家千万别拍砖!!!    

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

int count1(int num)
{
  int i;
  int j;
  int count = 0;
  
  int num1 = num-3;
  int num2 = num-6;
  
  for(i=5; i<=num1; i+=5)
   for(j=2;j<=num2;j+=2)
    {
     if( i+ j < num)
       count++;
    }
    
   return count;
}

int count2(int num)
{
  int i;
  int j;
  int count = 0;
  
  int num1 = num-3;
  
  for(i=5; i<=num1; i+=5)
    {
     count += (num -i -1 )/2;
    }
    
   return count;
}
 
int main(int argc, char *argv[])
{
    
  printf("total:%d\n",count1(1000));
  printf("total:%d\n",count2(1000));
  system("PAUSE");    
  return 0;
}

相关阅读 更多 +
排行榜 更多 +
超级摩托车特技3D

超级摩托车特技3D

赛车竞速 下载
超级汽车大乱斗

超级汽车大乱斗

赛车竞速 下载
沙漠越野车

沙漠越野车

赛车竞速 下载