| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 2386 人关注过本帖
标题:一道计算机报上的难题\C语言QQ群新建
收藏  订阅  推荐  打印 
幻帆
Rank: 1
等级:新手上路
帖子:8
积分:180
注册:2005-3-29
一道计算机报上的难题\C语言QQ群新建

对于一个数列,第一项为零,如果前后两项之差为一,

比如:1,2,1,-1。。。或者1,2,3,2,3,4,5,4,3,就称做是1S序列,

要求输入两个整数:sum和len,len表示这个数列的长度sum表示数列之和, 最后寻找这样的数列,如果有就输出,

比如输入1,6,那么输出1,0,-1,0,1,0。这是其中一个符合的数列

如果只输出一个好像比较简单,我们要求高点,输出所有符合数列. 另:本人新设C语言学习QQ群:805053.欢迎有兴趣者加入,共同讨论.

搜索更多相关主题的帖子: 计算机  难题  sum  len  QQ群  
2005-3-31 20:03
幻帆
Rank: 1
等级:新手上路
帖子:8
积分:180
注册:2005-3-29

这道题难道没人会解??

2005-4-1 11:51
乌鸦丘比特
Rank: 4
等级:高级会员
威望:2
帖子:625
积分:6500
注册:2004-7-19

好象楼主对数列的要求表述不清楚……
对于一个数列,第一项为零,如果前后两项之差为一,/*这里的如果两个字是什么意思?是不是一定要求满足条件?*/

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-4-1 12:32
乌鸦丘比特
Rank: 4
等级:高级会员
威望:2
帖子:625
积分:6500
注册:2004-7-19

还有就是是不是限制时间和空间?
SUM和LEN 的范围是多少?
如果不限制时间空间的话搜索应该就可以了。

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-4-1 12:33
想你的天空
Rank: 4
等级:高级会员
威望:5
帖子:610
积分:6210
注册:2004-12-30

楼主题目说的不清楚

2005-4-1 13:22
乌鸦丘比特
Rank: 4
等级:高级会员
威望:2
帖子:625
积分:6500
注册:2004-7-19

如果我的理解没错的话,这个题目的本质就是给数列B:len,....3,2,1个数加上+号或者-号,最后相加,如果=SUM,那么可疑推导出满足条件的数列,a[n]=a[n-1]-1或者a[n]=a[n-1]+1;其中-1或者+1取决于前面B[N]的符号,这个题目可以利用数学方法+一点点递归构造出目标数列

[此贴子已经被作者于2005-4-2 20:03:05编辑过]



我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-4-1 19:04
幻帆
Rank: 1
等级:新手上路
帖子:8
积分:180
注册:2005-3-29

乌雅理解的没错,我前面的第一项为零打错了.可以删去.
乌雅能给出具体的程序吗

2005-4-2 01:04
疯狂魔神
Rank: 1
等级:新手上路
帖子:22
积分:320
注册:2005-4-2

以下是引用乌鸦丘比特在2005-4-1 19:04:48的发言: 如果我的理解没错的话,这个题目的本质就是给数列B:1,2,3,4....len,个数加上+号或者-号,最后相加,如果=SUM,那么可疑推导出满足条件的数列,a[n]=a[n-1]-1或者a[n]=a[n-1]+1;其中-1或者+1取决于前面B[N]的符号,这个题目可以利用数学方法+一点点递归构造出目标数列
抱歉抱歉,这道是我给他的,当时漏了一句话,就是输入两个数之后先判断有没有这种数列存在,如有再列出数列。 没想到差这句话引来这么多误解的, 其实这道题的本意是要我们列出指定了数列总和以及数列项数的1s数列, 而1s数列就是前面说的第一项为0,从第二项开始,前后项之差为1,也就是说: 第二项可以是1或者-1,那么第四项就有三种可能

对我的帮助我记在心里 对我的取笑我看在眼中 比菜,我说了算 我努力在学~
2005-4-2 11:56
疯狂魔神
Rank: 1
等级:新手上路
帖子:22
积分:320
注册:2005-4-2

以下是引用乌鸦丘比特在2005-4-1 19:04:48的发言: 如果我的理解没错的话,这个题目的本质就是给数列B:1,2,3,4....len,个数加上+号或者-号,最后相加,如果=SUM,那么可疑推导出满足条件的数列,a[n]=a[n-1]-1或者a[n]=a[n-1]+1;其中-1或者+1取决于前面B[N]的符号,这个题目可以利用数学方法+一点点递归构造出目标数列
抱歉抱歉,这道是我给他的,当时漏了一句话,就是输入两个数之后先判断有没有这种数列存在,如有再列出数列。 没想到差这句话引来这么多误解的, 其实这道题的本意是要我们列出指定了数列总和以及数列项数的1s数列, 而1s数列就是前面说的第一项为0,从第二项开始,前后项之差为1,也就是说: 第二项可以是1或者-1,那么第三项就有三种可能,也就是2或者0或者-2,依次………… 而sum跟len就是由用户输入的两个数字, 不知这样说是否清楚一点点?

对我的帮助我记在心里 对我的取笑我看在眼中 比菜,我说了算 我努力在学~
2005-4-2 12:04
乌鸦丘比特
Rank: 4
等级:高级会员
威望:2
帖子:625
积分:6500
注册:2004-7-19

#include <stdio.h> long max,fuhao; int stack[1000],top; void print() {int i,j,num; num=0,j=1; for(i=top;i;i--) {while(j<(max-stack[i-1])) {num=num+fuhao;printf("%d ",num);j++;} num=num-fuhao; printf("%d ",num);j++;} while(j<max) {num=num+fuhao; printf("%d ",num); j++;} printf("\n");} long getnumber(long sum,long len) {long sum1; sum1=(len+1)*len/2;/*求和公式:1+2+...+len;*/ sum1=sum1-sum; if(sum1&1)return -1;/*if sum1 是奇数,不存在满足条件的数列*/ sum1=sum1/2; return sum1;} void first() {int i; top=0; for(i=0;i<1000;i++)stack[i]=0;} void make1(long sum) {long min,sum1; first(); while(top>=0) {if(!sum){print();top--;sum=sum+stack[top];continue;} min=0; if(top>0)min=stack[top-1]; if(min<stack[top])min=stack[top]; min++; if(min==max){stack[top]=0;top--;sum=sum+stack[top];continue;} sum1=(min+max)*(max-min-1); if(sum>sum1){stack[top]=0;top--;sum=sum+stack[top];continue;} stack[top]=min; sum=sum-min; top++;} } int main() {long sum,len,sum1; printf("please input sum and len:\n"); scanf("%ld%ld",&sum,&len); if(sum<0){sum=-sum;fuhao=-1;} else fuhao=1; max=len+1; sum1=getnumber(sum,len); if(sum1==-1){printf("no answer\n");getch( );return 0;} make1(sum1); getch( ); return 0;}

[此贴子已经被作者于2005-4-3 10:33:46编辑过]


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-4-2 19:55
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.071781 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved