您的位置:首页 > 编程语言 > C语言/C++

USACO 2.3 Zero Sum

2017-04-15 16:24 330 查看
题目:

Zero Sum

Consider the sequence of digits from 1 through N (where N=9) in increasing order: 1 2 3 ... N.
Now insert either a `+' for addition or a `-' for subtraction or a ` ' [blank] to run the digits together between each pair of digits (not in front of the first digit). Calculate the result that of the
expression and see if you get zero.
Write a program that will find all sequences of length N that produce a zero sum.

PROGRAM NAME: zerosum

INPUT FORMAT

A single line with the integer N (3 <= N <= 9).

SAMPLE INPUT (file zerosum.in)

7

OUTPUT FORMAT

In ASCII order, show each sequence that can create 0 sum with a `+', `-', or ` ' between each pair of numbers.

SAMPLE OUTPUT (file zerosum.out)

1+2-3+4-5-6+71+2-3-4+5+6-71-2 3+4+5+6+71-2 3-4 5+6 71-2+3+4-5+6-71-2-3-4-5+6+7


思路: 水题。深搜,生成字符串,然后判断该字符串是否符合要求,输出。

代码:/*
ID: gjj50201
LANG: C++
TASK: zerosum
*/

#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int n;
char digits[10] = {'0','1','2','3','4','5','6','7','8','9'};

queue<string> ans;
bool check(string s){
int sum = 0;
queue <char> op;
queue <int> num;
for(int i=0;i<=s.size();i++){
if(i == s.size())
num.push(sum);
else if(s[i] == '+' || s[i] == '-'){
op.push(s[i]);
num.push(sum);
sum = 0;
}
else if(s[i]>='1' && s[i]<= '9')
sum = sum*10 + s[i] - '0';
}

int d1,d2;
d1 = num.front();
num.pop();
while(!op.empty()){
char o;
o = op.front();
op.pop();
d2 = num.front();
num.pop();
switch(o){
case '+':{
d1 = d1 + d2;
break;
}
case '-':{
d1 = d1 - d2;
break;
}

}
}
if(d1 == 0){
return true;
}
else
return false;
}

void dfs(string s,int k){
s = s + digits[k];
if(k == n){
if(check(s))
ans.push(s);
return;
}
dfs(s+' ',k+1);
dfs(s+'+',k+1);
dfs(s+'-',k+1);

return;
}

int main(){
freopen("zerosum.in","r",stdin);
freopen("zerosum.out","w",stdout);
cin>>n;
dfs("",1);
while(!ans.empty()){
cout<<ans.front()<<endl;
ans.pop();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DFS c语言 搜索 模拟