| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4240 人关注过本帖
标题:一道计算机报上的难题\C语言QQ群新建
只看楼主 加入收藏
幻帆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-3-29
收藏
 问题点数:0 回复次数:36 
一道计算机报上的难题\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-03-31 20:03
幻帆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-3-29
收藏
得分:0 
这道题难道没人会解??

2005-04-01 11:51
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
好象楼主对数列的要求表述不清楚……
对于一个数列,第一项为零,如果前后两项之差为一,/*这里的如果两个字是什么意思?是不是一定要求满足条件?*/

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-04-01 12:32
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
还有就是是不是限制时间和空间?
SUM和LEN 的范围是多少?
如果不限制时间空间的话搜索应该就可以了。

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2005-04-01 12:33
想你的天空
Rank: 2
等 级:新手上路
威 望:5
帖 子:610
专家分:0
注 册:2004-12-30
收藏
得分:0 
楼主题目说的不清楚

2005-04-01 13:22
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
如果我的理解没错的话,这个题目的本质就是给数列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-04-01 19:04
幻帆
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-3-29
收藏
得分:0 
乌雅理解的没错,我前面的第一项为零打错了.可以删去.
乌雅能给出具体的程序吗

2005-04-02 01:04
疯狂魔神
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2005-4-2
收藏
得分:0 
以下是引用乌鸦丘比特在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-04-02 11:56
疯狂魔神
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2005-4-2
收藏
得分:0 
以下是引用乌鸦丘比特在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-04-02 12:04
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
#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-04-02 19:55
快速回复:一道计算机报上的难题\C语言QQ群新建
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022956 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved