【USACO 2.3.3】零数列

【题目描述】

请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N。 现在请在数列中插入“+”表示加,或者“-”表示减,“ ”表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号)。 计算该表达式的结果并判断其值是否为0。 请你写一个程序找出所有产生和为零的长度为N的数列。

【格式】

PROGRAM NAME: zerosum

INPUT FORMAT

单独的一行表示整数N (3 <= N <= 9)。

OUTPUT FORMAT

按照ASCII码的顺序,输出所有在每对数字间插入“+”, “-”, 或 “ ”后能得到结果为零的数列。

【分析】

直接DFS,注意累加的时候的公式:

sum-last+last*10+(last的符号)*k(当前数字).

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <cstring>
 7 using namespace std;
 8 int n;
 9 int sgn(int k) {return k>0?1:-1;}//判断符号
10 void dfs(int sum,int last,int k,string rem)
11 {
12     if(k==n+1)//边界条件
13     {
14         if(sum==0) cout<<rem<<endl;
15         return;
16     }
17     //sum+(last*9+sgn(last)*k)这句意思是
18     dfs(sum+(last*9+sgn(last)*k),last*10+sgn(last)*k,k+1,rem+" "+(char)(k+48));
19     dfs(sum+k,k,k+1,rem+"+"+(char)(k+48));
20     dfs(sum-k,-k,k+1,rem+"-"+(char)(k+48));
21 }
22 int main()
23 {
24     //文件操作
25     freopen("zerosum.in","r",stdin);
26     freopen("zerosum.out","w",stdout);
27     scanf("%d",&n);
28     dfs(1,1,2,"1");
29     return 0;
30 }

【USACO 2.3.3】零数列,布布扣,bubuko.com

时间: 2024-12-17 22:26:58

【USACO 2.3.3】零数列的相关文章

洛谷P1473 零的数列 Zero Sum

P1473 零的数列 Zero Sum 134通过 170提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 路过的一定帮我看错了我死了… 题目描述 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,“ ”表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号). 计算该表达式的结果并判断其值是否为0. 请你写一

洛谷 P1473 [USACO2.3]零的数列 Zero Sum

题目描述 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入"+"表示加,或者"-"表示减," "表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号). 计算该表达式的结果并判断其值是否为0. 请你写一个程序找出所有产生和为零的长度为N的数列. 输入输出格式 输入格式: 单独的一行表示整数N (3 <= N <= 9).

usaco No Change, 2013 Nov 不找零(二分查找+状压dp)

Description 约翰带着 N 头奶牛在超市买东西,现在他们正在排队付钱,排在第 i 个位置的奶牛需要支付 Ci 元.今天说好所有东西都是约翰请客的,但直到付账的时候,约翰才意识到自己没带钱,身上只有 K 张消费卡,第 i 张卡里有 Vi 元余额. 问题是,这些消费卡都是一次性的,它们可以被收银机读取,但如果卡一旦离开了收银机,卡里 的余额就会归零,而且超市也不负责找零!奶牛的队伍很长,不可能再调整她们的位置了,所以一张 卡只能支付一段连在一起的账单.而且,一张账单只能用一张消费卡支付,超

【USACO 3.2】Factorials(阶层非零尾数)

题意:输出n的阶层最后一个非0数. 题解:可以把5和2的个数算出来,每次把5和2都除掉,最后乘上比5多出来的2.我的解法是,每次把尾巴的0去掉,并且保留3位,算到最后取尾数就可以了.. /* TASK:fact4 LANG:C++ */ #include<cstdio> #include<algorithm> #include<cstring> #define INF 0x3f3f3f3f using namespace std; int main(){ freopen

用递归和非递归的方法输出斐波那契数列的第n个元素(C语言实现)

费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数.斐波那契数列.费氏数列.黄金分割数列. 在数学上,费波那契数列是以递归的方法来定义: {\displaystyle F_{0}=0} {\displaystyle F_{1}=1} {\displaystyle F_{n}=F_{n-1}+F_{n-2}}(n≧2) 用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出.首几个费波那契系数是: 0, 1, 1, 2, 3

一起入门python3之元组和数列

这一节我们来说一下,元组(tupe)&数列(list).每天苦逼的工作不易啊,哎.不过呢一腔热血学习.哈哈哈哈 #井号代表注释哈. 0x01 数列-list        数列可以说是一种集合,我们可以随时的对里面的数据进行删减等操作.且看下面的操作>>>hi = ['hello','world']         #如此便是创建一个数列,里面的元素为hello,world然后赋值给hi>>>hi.append("ergouzi") #加入一

PAT从零单排

偶然原因开始了PAT之旅前前后后用了3天时间刷完了PAT Basic(35题) 现在记录下从零单排的过程,总的来说题目很简单 当然有个别题目的坑点还是比较给力的,准确的说,题目的数据很给力 1001. 害死人不偿命的(3n+1)猜想 (15) 纯模拟题,是偶数除以2,奇数(3n+1)除以2,到1结束 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,

数列 题解(NOIP模拟T2)

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. [题目描述] a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1]  (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. [输入格式] 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. [输出格式] 每行输出一个非负整数表示答案. [样例输入] 3 6 8 10 [样例输出] 4 9 19 [数据范围] 对于30%的数据 n<=100: 对于60%的数据 n<=

ACM2 斐波那契数列

描述 在数学上,斐波那契数列(Fibonacci Sequence),是以递归的方法来定义: F0 = 0 F1 = 1 Fn = Fn - 1 + Fn - 2 用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契数就由之前的两数相加.首几个斐波那契数是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,……………… 特别指出:0不是第一项,而是第