博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个简单的算法题
阅读量:6428 次
发布时间:2019-06-23

本文共 1527 字,大约阅读时间需要 5 分钟。

还没有从过节的情绪中恢复过来,最近都不想写代码,越来越懒了。不想写代码,就写文档吧,今天花了一个上午时间写好了我们公司应用中定义的一个应用层协议的文档,手都打软了。。。。
下午跑到CSDN去逛了哈,看到很多人在讨论这个算法:
求数值在 1 - 50 之内的任意5个数之和为100 。
数值:1,2,3,4,5,6....48,49,50
取其中的任意5个数,但这5个数相加之和要等于100,并将所有这种组合罗列
例: 1+10+19+20+50=100
     3+14+16+27+40=100
不能有重复
大多数都是循环实现,我给出我的一个递归实现吧(GCC编译器,DEVCPP下编译通过,计算时间我没算,反正马上出结果,应该不到1秒):
 1
None.gif
#include 
<
conio.h
>
 2
None.gif#include 
<
stdlib.h
>
 3
None.gif#include 
<
stdio.h
>
 4
None.gif#include 
<
dos.h
>
 5
None.gif
 6
None.gif
 7
None.gif
#define
 NUM 5
 8
None.gif
#define
 LOWER 1
 9
None.gif
#define
 UPPER 50
10
None.gif
#define
 MATCH_TOTAL_NUM 100
11
None.gif
#define
 OUTPUT_FILENAME  "result.txt"
12
None.gif
13
None.gif
void
 CountNext(
int
 
*
num, 
int
 length, 
int
 total);
14
None.gif
15
None.gif
int
 g_num[NUM];
16
None.gif
static
 
int
 g_totalWays 
=
 
0
;
17
None.gifFILE 
*
g_fp;
18
None.gif
19
None.gif
void
 CountNext(
int
 
*
num, 
int
 length, 
int
 total)
20
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{   
21InBlock.gif  if(total < 0)
22ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif
23InBlock.gif     return;
24ExpandedSubBlockEnd.gif  }
25InBlock.gif  for(int i = LOWER; i <= UPPER; i++)
26ExpandedSubBlockStart.gifContractedSubBlock.gif  dot.gif
27InBlock.gif    if(length != NUM - 1)                                                          
28ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
29InBlock.gif      if(g_num[length+1>= i)
30InBlock.gif        continue;
31ExpandedSubBlockEnd.gif    }
32InBlock.gif    
33InBlock.gif    g_num[length] = i;    
34InBlock.gif                                    
35InBlock.gif    if(length == 0)  
36ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{                  
37InBlock.gif      if(total != i)
38ExpandedSubBlockStart.gifContractedSubBlock.gif      dot.gif{
39InBlock.gif        if(i == UPPER)
40ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
41InBlock.gif          return;
42ExpandedSubBlockEnd.gif        }
43InBlock.gif        continue;      
44ExpandedSubBlockEnd.gif      }
45InBlock.gif      else
46ExpandedSubBlockStart.gifContractedSubBlock.gif      dot.gif{
47InBlock.gif        g_totalWays++;                            
48InBlock.gif        for(int idx = 0; idx < NUM; idx++)
49ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
50InBlock.gif          fprintf(g_fp, "%d ", g_num[idx]);
51ExpandedSubBlockEnd.gif        }
52InBlock.gif        fputs("\n", g_fp);                                    
53ExpandedSubBlockEnd.gif      }
54InBlock.gif      return;
55ExpandedSubBlockEnd.gif    }
56InBlock.gif           
57InBlock.gif    CountNext(num, length - 1, total - i);
58ExpandedSubBlockEnd.gif  }
59ExpandedBlockEnd.gif}
60
None.gif
61
None.gif
int
 main() 
62
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
{
63InBlock.gif  unlink(OUTPUT_FILENAME);
64InBlock.gif  g_fp = fopen(OUTPUT_FILENAME, "at");
65InBlock.gif  CountNext(g_num, NUM - 1, MATCH_TOTAL_NUM);    
66InBlock.gif  fclose(g_fp);
67InBlock.gif  
68InBlock.gif  printf("Total ways = %d\n", g_totalWays);
69InBlock.gif  getch();  
70InBlock.gif  return 0;
71ExpandedBlockEnd.gif}
72
None.gif

转载于:https://www.cnblogs.com/leaway/archive/2007/02/28/659851.html

你可能感兴趣的文章
Linux运维基础命令
查看>>
使用PowerShell配置IP地址
查看>>
第十一章 MySQL运算符
查看>>
JAVA常见算法题(十七)
查看>>
GUI鼠标相关设置
查看>>
使用 <Iframe>实现跨域通信
查看>>
闭包--循序学习
查看>>
项目实战之集成邮件开发
查看>>
解决C3P0在Linux下Failed to get local InetAddress for VMID问题
查看>>
1531 山峰 【栈的应用】
查看>>
巧用美女照做微信吸粉,你会做吗?
查看>>
wcf学习总结《上》
查看>>
ERROR (ClientException)
查看>>
Load Balance 产品横向比较
查看>>
Java代理程序实现web方式管理邮件组成员
查看>>
【编译打包】tengine 1.5.1 SRPM
查看>>
看图说话:手动清除病毒文件流程
查看>>
一句话下拖库
查看>>
Deploy Office Communications Server 2007R2 Group Chat Server(二)
查看>>
在Cacti上实现MSN报警机制
查看>>