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

    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 }
复制代码

 

posted on   IceDream61  阅读(206)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示