码迷,mamicode.com
首页 > 其他好文 > 详细

USACO Section2.3 Zero Sum 解题报告 【icedream61】

时间:2015-05-23 20:01:49      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

    zerosum解题报告
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  给你N。
  把1到N依次写出,每相邻两个数字中间加上一个字符,三选一:‘+‘,‘-‘,‘ ‘。
  如此,便可形成很多表达式,把其中计算结果为0的按字典序输出。
【数据范围】
  3<=N<=9
【输入样例】
  7
【输出样例】
  1+2-3+4-5-6+7
  1+2-3-4+5+6-7
  1-2 3+4+5+6+7
  1-2 3-4 5+6 7
  1-2+3+4-5+6-7
  1-2-3-4-5+6+7
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  枚举。脑子清楚,代码别写错就好。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  一遍AC。

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 1 /*
 2 ID: icedrea1
 3 PROB: zerosum
 4 LANG: C++
 5 */
 6 
 7 #include <iostream>
 8 #include <fstream>
 9 using namespace std;
10 
11 int N;
12 char mark[9];
13 
14 int get(int &l)
15 {
16     int r=l;
17     while(r<N && mark[r]== ) ++r;
18     int x=0;
19     for(int i=l;i<=r;++i) x=x*10+i;
20     l=r+1;
21     return x;
22 }
23 
24 void get(int i,char &c)
25 {
26     c=mark[i-1];
27 }
28 
29 void print(ostream& out)
30 {
31     for(int i=1;i<=N-1;++i) out<<i<<mark[i];
32     out<<N<<endl;
33 }
34 
35 void test(ostream& out)
36 {
37     //cout<<"test: "; print(cout);
38     int r=0;
39     char c=+;
40     for(int i=1,num=get(i);;num=get(i))
41     {
42         if(c==+) r+=num; else r-=num;
43         if(i==N+1) break; else get(i,c);
44     }
45     if(r==0) print(out);
46 }
47 
48 void go(int i,ostream& out)
49 {
50     //cout<<i<<endl;
51     if(i==N) { test(out); return; }
52     mark[i]= ; go(i+1,out);
53     mark[i]=+; go(i+1,out);
54     mark[i]=-; go(i+1,out);
55 }
56 
57 int main()
58 {
59     //printf("%d %d %d\n",‘+‘,‘-‘,‘ ‘);
60 
61     ifstream in("zerosum.in");
62     ofstream out("zerosum.out");
63 
64     in>>N;
65 
66     go(1,out);
67 
68     in.close();
69     out.close();
70     return 0;
71 }

 

USACO Section2.3 Zero Sum 解题报告 【icedream61】

标签:

原文地址:http://www.cnblogs.com/icedream61/p/4524678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!