查看原文
其他

【校招编程08】求出用1,2,5这三个数……

hepfei90 嵌入式大杂烩 2021-01-31


原文

 

https://blog.csdn.net/hepfei90/article/details/13614529


题目:求出用1、2、5这三个数不同个数组合的和为100的组合数。


【方法一】基础编程

int CalcNum(void)
{
 int number=0;
 int x, y, z;
 
 for (x = 0; x <= 100; x++)
 {
   for (y = 0; y <= 50; y++)
   {
     for (z=0; z <= 20; z++)
     {
       if ((x+2*y+5*z) == 100)
       {
         number++;
       }
     }
   }  
 }
   
 return number;
}

【方法二】高级编程

int CalcNum(void)
{  
 int number = 0;
 int x, y, z;
 
 for (x = 0; x <= 100; x++)
 {
   for (y = 0; y <= (100-x)/2; y++)
   {
     for (z = 0; z <= (100-x-2*y)/2; z++)
     {
       if ((x+2*y+5*z) == 100)
       {
         number++;
       }  
     }  
   }
 }
   
 return number;
}


【方法三】数学编程

// 数学编程:x+2y+5z = 100 先控制z,然后控制y,最后看x的规律
// 控制了z,x作为填充,有多少个偶数就有多少种方案。
// 例如:
//  z=0,x+2y=100-0*5=100,然后取y=0,一直到y=100/2 = 50 注意0-50共51种情况
//   z=1,x+2y=100-1*5=95,然后取y=0,一直到y=95/2 = 47 注意0-47共48种情况
//   z=2,x+2y=100-2*5=90,然后取y=0,一直到y=90/2 = 45 注意0-45共46种情况
//   ……
//   z=20,x+2y=100-20*5=0,然后取y=0,一直到y=0/2 = 0
int CalcNum(void)
{  
 int number=0;
 int z;
 
 for (z = 0; z <= 20; z++)
 {
   number += (100-5*z)/2+1;
 }
   
 return number;
}



往期精彩推荐

【校招编程】懂二进制

【校招编程】级数求和

【校招编程】整数翻转

【校招编程】字符串逆序

后台回复:C101,获取【入门C语言最好的书籍】

后台回复:C000,获取【热门C语言电子书】

后台回复:CV000,获取【热门C语言视频教程】

后台回复:py001,获取【编程小白的第一本python入门书】


关注公众号获取更多资源分享!


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存