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.
思路: 水题。深搜,生成字符串,然后判断该字符串是否符合要求,输出。
代码:/*
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;
}
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;
}
相关文章推荐
- USACO 2.3 Zero Sum(DFS)
- USACO section2.3 Zero Sum题解&代码
- [usaco]2.3 Zero Sum
- USACO 2.3 Zero Sum 题解
- USACO 2.3 Zero Sum (zerosum)
- 【USACO 2.3】Zero Sum(dfs)
- USACO-Section 2.3 Zero Sum(枚举)
- USACO 2.3 Zero Sum
- USACO 2.3 Zero Sum
- USACO Section 2.3: Zero Sum
- USACO Section2.3 Zero Sum 解题报告 【icedream61】
- USACO--2.3Zero Sum
- [USACO2.3]最长前缀 Longest Prefix
- 【USACO 2.3】The Longest Prefix
- USACO 2.3 Cow Pedigrees(DP)
- USACO-Zero Sum
- USACO - Chapter2 Section 2.3 Controlling Companies
- USACO 2.3 Cow Pedigrees 题解
- [USACO2.3]奶牛家谱 Cow Pedigrees
- USACO 2.3.3 Zero Sum