算法学习笔记之抽签

抽 签
你的朋友提议玩一个游戏:将写有数字的n 个纸片放入口袋中,你可以从口袋中抽取4 次纸
片,每次记下纸片上的数字后都将其放回口袋中。如果这4 个数字的和是m,就是你赢,否
则就是你的朋友赢。你挑战了好几回,结果一次也没赢过,于是怒而撕破口袋,取出所有纸
片,检查自己是否真的有赢的可能性。请你编写一个程序,判断当纸片上所写的数字是k1,
k2, …, kn 时,是否存在抽取4 次和为m 的方案。如果存在,输出Yes;否则,输出No。
限制条件
 1 ≤ n ≤ 50
 1 ≤ m ≤ 108
 1 ≤ ki ≤ 108
输入
n = 3
m = 10
k = {1, 3, 5}
输出
Yes(例如4次抽取的结果是1、1、3、5,和就是10)

 

答案:

 1 // suanfa.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 
 6 const int MAX_N=50;
 7 
 8 int _tmain(int argc, _TCHAR* argv[])
 9 {
10     int n,m,k[MAX_N];
11 
12     scanf("%d %d",&n,&m);
13     for(int i=0;i<n;i++)
14     {
15         scanf("%d",&k[i]);
16     }
17 
18     bool f=false;
19 
20     for (int a=0;a<n;a++)
21     {
22         for (int b=0;b<n;b++)
23         {
24             for (int c=0;c<n;c++)
25             {
26                 for (int d=0;d<n;d++)
27                 {
28                     if (k[a]+k[b]+k[c]+k[d]==m)
29                     {
30                         f=true;
31                     }
32                 }
33             }
34         }
35     }
36 
37     if (f)
38     {
39         puts("Yes");
40     } 
41     else
42     {
43         puts("No");
44     }
45 
46     return 0;
47 }

四重for循环做了一个简单的穷举

posted @ 2013-08-23 15:24  dandanbo  阅读(1220)  评论(0编辑  收藏  举报