zoukankan      html  css  js  c++  java
  • 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
    ",'+','-',' ');
    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 }
  • 相关阅读:
    vue Can't resolve 图片
    TP-LINK WR740N中继设置,AP设置,设置后不能上网,亲测有效
    vue VSCode 开发设置(html自动补全、eslint保存时格式化、vetur 格式化html)
    不再手写import
    vscode vuter的快捷键 关键字
    prototype是什么?
    真有效值与有效值概念
    现代文经典
    古文经典
    最后,我想对你说一句:我爱你
  • 原文地址:https://www.cnblogs.com/icedream61/p/4524678.html
Copyright © 2011-2022 走看看