| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4854 人关注过本帖
标题:[讨论]第七次编程题目,大家支持一下
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
看了一下se7en_enter 的算法大体上和我的差不多.但觉得你在求times这段代码中有点冗余.看能不能再简化一下.

倚天照海花无数,流水高山心自知。
2007-03-12 22:50
zcs302
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-3-6
收藏
得分:0 
回复:(无玩过界)to:zcs302,你的思路很不错[em17],...

谢谢你,我考虑还不够周到
已经改过来了
else if(*(p+i)=='#')
{
if(*(p+i-1)=='\n' && outlen==0)
continue;
else
outlen--;
}//里面的&& 改成|| 就行了

2007-03-12 22:52
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
crackerwang I喜欢c 都写的蛮好.

crackerwang 最好不要写递归,效率低.

I喜欢c 说下qu()的思路.

倚天照海花无数,流水高山心自知。
2007-03-12 22:56
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 
to:zcs302,也有BUG
12345
###########

2007-03-12 23:27
iwfy
Rank: 1
等 级:新手上路
威 望:2
帖 子:888
专家分:0
注 册:2007-2-23
收藏
得分:0 
回复:(crackerwang)
已经注释好,在第3页最后
大概思路就是把3的n次方全部处理成n,n从{2}开始,{2}后的有{20}{21}{210},后抛去10,剩下一个2升到{3},后是{30}{31}{310},抛去10,{32}后是{320}{321}{3210},抛弃210,剩下一个3升到4,后{40}{41}{410},抛去10,{42}{420}{421}{4210},抛去10,{43}{430}{431}{4310},抛去10,{432}{4320}{4321}{43210},抛去3210剩下一个4升到{5},{50}{51}{510},抛去10,{52}{520}{521}{5210},抛去210,{53}。。。。。。。。。。。

具体步骤在第3页最后个楼。

英语不好还想学编程??逆天之路,不由分说!! 数学太差还想学编程??离经叛道,义无返顾!!
2007-03-13 10:26
zcs302
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-3-6
收藏
得分:0 
回复:(无玩过界)to:zcs302,也有BUG12345##########...

谢谢你,真的很感谢你,你帮我发现了不少问题了,现在已经改过来了,同时,我在调试的时候又发现了一个bug:当处理的时候,要是当前行已经删除完了(所有字符都废弃)最后还留下一个回车,最后也让我改过来了,值得庆祝
请大家在帮忙看看还有什么bug,程序在46楼,谢谢
现在把修改的部分在这再说一下:
else if(*(p+i)=='#') //处理退格符
{
if(*(p+i-1)=='\n' || outlen==0) //行首出现#的情况
continue;
else
outlen--; //一般情况
}
//该部分改为
else if(*(p+i)=='#')
{
if(outlen-1==enter || outlen==0)
//同是对行首的识别,但现在是从输出上判断,原先的是从输入上判断
continue;
else
outlen--;
}
///////////////////////////////////////////////////////////////////////////////
if(*(p+i)!='#'&&*(p+i)!='@') //把普通字符和特殊功能字符区分
{
if(*(p+i)=='\n')
{
enter=outlen; //记录最近一行结束的位置(即回车的地方)
//退行符将会用到
}
*(p+outlen++)=*(p+i); //用有用的字符覆盖掉应删除的字符
}
//修改以克服废弃整行字符却还留下回车符的情况(如123456@回车)
if(*(p+i)!='#'&&*(p+i)!='@')
{
if(*(p+i)=='\n')
{
if(outlen-1==enter)//判断此行是否已经为空
continue;
else
{
enter=outlen;
*(p+outlen++)=*(p+i);
}
}
else *(p+outlen++)=*(p+i);
}
希望大家帮忙改进一下

2007-03-13 13:15
iwfy
Rank: 1
等 级:新手上路
威 望:2
帖 子:888
专家分:0
注 册:2007-2-23
收藏
得分:0 
还有一种思路,先看看这个:
2的1次方2: 0
2的2次方4: 1 0
2的3次方8: 2 1 0
2的4次方16: 3 2 1 0
2的5次方32: 4 3 2 1 0
2的6次方64: 5 4 3 2 1 0
2的7次方128: 6 5 4 3 2 1 0
2的8次方256: 7 6 5 4 3 2 1 0
2的9次方512: 8 7 6 5 4 3 2 1 0
2的10次方1024: 9 8 7 6 5 4 3 2 1 0
拿512来说:8 7 6 5 4 3 2 1 0
511 8 7 6 5 4 3 2 1 少了0
510 8 7 6 5 4 3 2 0 少了1
509 8 7 6 5 4 3 2 少了1 0
508 8 7 6 5 4 3 1 0 少了2 512-508=4=2的平方
507 8 7 6 5 4 3 1 少了2 0
488 8 7 6 5 2 1 0 少了4 3 512-488=24=2的4次方+2的3次方
486 8 7 6 5 2 0 少了4 3 1 512-486=2的4次方+2的3次方+2的1次方

[此贴子已经被作者于2007-3-13 17:04:42编辑过]


英语不好还想学编程??逆天之路,不由分说!! 数学太差还想学编程??离经叛道,义无返顾!!
2007-03-13 13:41
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 
to:zcs302:123456@123456###############也是BUG

2007-03-13 16:02
iwfy
Rank: 1
等 级:新手上路
威 望:2
帖 子:888
专家分:0
注 册:2007-2-23
收藏
得分:0 

比第一个思路好点,能快些,但是看结果而得来的,是不是巧合,我试了很多次都跟第一个的结果一样。
这里就不用换算成3的次方了,大家改正下
#include "math.h"
#include "stdio.h"
struct st
{
int i;
struct st *next;
struct st *qian;
}*st1,*a,*b;
printxulie(struct str *xulie) //输出最后结果集
{
struct str *pa;
pa=xulie;
if(pa->qian==0) printf("%d ",pa->i);
else
for(;pa!=0;pa=pa->qian)
printf("%d ",pa->i);
printf("\n");
}
quchu(struct st *xulie,int n)
{
struct st *pa,*pb;
pb=xulie;
if(pb->i==n) //当要去掉的是链表头一个时
{
st1=pb->next;
pb->next->qian=st1;
st1->qian=0;
pb->qian=0;
pb->next=0;
free(pb);
}
else
while(pb->next!=0)
{
if(pb->next->i==n)
{
pa=pb->next;
pb->next=pb->next->next;
pb->next->qian=pb;
pa->next=0;
pa->qian=0;
free(pa);
break;
}
else pb=pb->next;
}
}
main()
{
int i;
long cha,wei,n;
scanf("%ld",&wei);
while(wei>1)
{
for(cha=wei,i=0;cha>pow(2,i-1);i++) //cha小与wei的情况下,纪录i到链表st1中
{
b=(struct st*)malloc(sizeof(struct st));
b->i=i;
if(i==0) st1=a=b;
else
{
a->next=b;
b->qian=a;
}
b->next=0;
a=b;
} //st1是链表头地址a是尾地址
a->qian->next=0;
a=a->qian;
a->next=0;
b->next=0;
b->qian=0;
free(b);
i=i-1;
if(cha==pow(2,i)) //cha=pow(2,i),直接输出链表st1
printxulie(a);
else
{
cha=(long)(pow(2,i)-cha);
for(;cha!=0;)
{
i=i-1;
for(;cha<=(long)pow(2,i);i--);
i=i+1;
if(cha==(long)pow(2,i))
{
quchu(st1,i); //st1里除去i;
printxulie(a);
break;
}
else
{
for(;(long)pow(2,i)>=cha;i--);
cha=cha-(long)pow(2,i);
quchu(st1,i);
i=i+1;
}
}
}
scanf("%ld",&wei);
if(wei<1) break;
for(;st1!=0;st1=st1->next);
}
}

[此贴子已经被作者于2007-3-13 18:59:12编辑过]


英语不好还想学编程??逆天之路,不由分说!! 数学太差还想学编程??离经叛道,义无返顾!!
2007-03-13 17:41
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
以下是引用iwfy在2007-3-13 13:41:57的发言:
还有一种思路,先看看这个:
2的1次方2: 0
2的2次方4: 1 0
2的3次方8: 2 1 0
2的4次方16: 3 2 1 0
2的5次方32: 4 3 2 1 0
2的6次方64: 5 4 3 2 1 0
2的7次方128: 6 5 4 3 2 1 0
2的8次方256: 7 6 5 4 3 2 1 0
2的9次方512: 8 7 6 5 4 3 2 1 0
2的10次方1024: 9 8 7 6 5 4 3 2 1 0
拿512来说:8 7 6 5 4 3 2 1 0
511 8 7 6 5 4 3 2 1 少了0
510 8 7 6 5 4 3 2 0 少了1
509 8 7 6 5 4 3 2 少了1 0
508 8 7 6 5 4 3 1 0 少了2 512-508=4=2的平方
507 8 7 6 5 4 3 1 少了2 0
488 8 7 6 5 2 1 0 少了4 3 512-488=24=2的4次方+2的3次方
486 8 7 6 5 2 0 少了4 3 1 512-486=2的4次方+2的3次方+2的1次方

这个我看懂了,


2007-03-13 18:43
快速回复:[讨论]第七次编程题目,大家支持一下
数据加载中...
 
   



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

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