| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4854 人关注过本帖
标题:[讨论]第七次编程题目,大家支持一下
取消只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
结帖率:50%
收藏
 问题点数:0 回复次数:23 
[讨论]第七次编程题目,大家支持一下

行编辑器
Problem
一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。

由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的。较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时可以及时更正。例如,当用户发现刚刚键入的一个字符是错的时,可补进一个退格符"#",以表示前一个字符无效;

如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符"@",以表示当前行中的字符均无效。

如果已经在行首继续输入'#'符号无效。

Input
输入一个多行的字符序列。但行字符总数(包含退格符和退行符)不大于250。

Output
按照上述说明得到的输出。

Sample Input
whli##ilr#e(s#*s)
outcha@putchar(*s=#++);

Sample Output
while(*s)
putchar(*s++);

搜索更多相关主题的帖子: 题目 讨论 
2007-03-10 15:08
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

问题:一个好汉三个帮,三个好汉九个帮,九个好汉二十七个帮,...停,今天不是让你算n个好汉几个帮(有兴趣的网友可以自己算),我们来看这个集合

{ 1, 3, 9, 27, 81, ... }

这个集合是一个递增的无限集,每个元素都是3的幂。

我们把这个集合的所有子集按照元素和从小到大的顺序排好: {}(空集), { 1 }, { 3 }, { 1, 3 }, { 9 }, { 1, 9 }, { 3, 9 }, { 1, 3, 9 }, ...

现在给定一个正整数n,求第n个子集的所有元素,并按从大到小的顺序排列好

例:

n的值 结果
1 { }
4 { 3, 1 }
6 { 9, 1 }
500 { 6561, 2187, 729, 243, 81, 3, 1 }


倚天照海花无数,流水高山心自知。
2007-03-10 15:10
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
两个题目都不难,大胆的去做就是.

倚天照海花无数,流水高山心自知。
2007-03-10 16:05
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
6楼在往深想一下,思路是这样,找出进一步的规律就豁然开朗了.

倚天照海花无数,流水高山心自知。
2007-03-10 18:46
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
如果我的程序没有错的话,200应该是下面这个.
200
{ 2187, 729, 9, 3, 1 }


倚天照海花无数,流水高山心自知。
2007-03-10 18:48
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
最好不要使用递归,效率不高.

第一个其实很简单,不要想那么复杂,数组就可以的.只要达到题目的要求就行.

倚天照海花无数,流水高山心自知。
2007-03-10 20:27
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以下是引用crackerwang在2007-3-10 20:18:40的发言:
楼主,这是我写的,第一次参加讨论,从一发上来就开始想了
#include<stdio.h>
void puts(double );函数名冲突.
#include<math.h>
void main()
{
int n;
scanf("%d",&n);
if(n==1)
printf(" ");
else
puts(n-1);

}
void puts(double n)
{
int i,k;
for(i=0;;i++)
{
if(pow(2,i)-1>=n)
break;
}
i--;
k=pow(3,i);
printf("%d ",k);
n=n-pow(2,i);
if(n>=1)
puts(n);
}
我测试了1,2,4,6,200,500;答案都是对的
第一个题目我不是很明白,我想用动态数组来解决多行的问题,但是我想题目不会这么简单吧

算法没什么问题,应该是这样了.把数据范围加大一点.


倚天照海花无数,流水高山心自知。
2007-03-10 20:36
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

根据我自己写的,给出一些随机测试数据.大家顺便帮忙检查一下,谢谢.
2345
{ 177147, 6561, 243, 27 }
23545
{ 4782969, 531441, 177147, 19683, 6561, 2187, 729, 243, 81, 27 }
9762
{ 1594323, 59049, 19683, 243, 1 }
12980
{ 1594323, 531441, 19683, 2187, 243, 81, 3, 1 }
123456
{ 43046721, 14348907, 4782969, 1594323, 19683, 243, 81, 27, 9, 3, 1 }
32417
{ 4782969, 1594323, 531441, 177147, 59049, 19683, 2187, 243 }
865273
{ 9 }
86527
{ 43046721, 4782969, 531441, 6561, 2187, 729, 243, 81, 27, 9, 3 }
34286
{ 14348907, 59049, 6561, 2187, 729, 243, 27, 9, 1 }
23
{ 81, 9, 3 }
41
{ 243, 27 }
78
{ 729, 27, 9, 1 }
852
{ 19683, 6561, 729, 81, 3, 1 }
135
{ 2187, 9, 3 }
97
{ 729, 243 }
2345
{ 177147, 6561, 243, 27 }
23545
{ 4782969, 531441, 177147, 19683, 6561, 2187, 729, 243, 81, 27 }
9762
{ 1594323, 59049, 19683, 243, 1 }
12980
{ 1594323, 531441, 19683, 2187, 243, 81, 3, 1 }
123456
{ 43046721, 14348907, 4782969, 1594323, 19683, 243, 81, 27, 9, 3, 1 }
32417
{ 4782969, 1594323, 531441, 177147, 59049, 19683, 2187, 243 }
86527
{ 43046721, 4782969, 531441, 6561, 2187, 729, 243, 81, 27, 9, 3 }
34286
{ 14348907, 59049, 6561, 2187, 729, 243, 27, 9, 1 }
23
{ 81, 9, 3 }
41
{ 243, 27 }
78
{ 729, 27, 9, 1 }
852
{ 19683, 6561, 729, 81, 3, 1 }
135
{ 2187, 9, 3 }
97
{ 729, 243 }
8
{ 9, 3, 1 }
500
{ 6561, 2187, 729, 243, 81, 3, 1 }
11
{ 27, 3 }
16
{ 27, 9, 3, 1 }




倚天照海花无数,流水高山心自知。
2007-03-11 11:05
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
大家讨论的差不多的时候,我把自己写的贴出来.大家继续啊

倚天照海花无数,流水高山心自知。
2007-03-11 18:24
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

干脆把我自己的行编译器程序贴出来,大家帮忙找不足之处.

#include<stdio.h>
#include<string.h>

int main()
{
#ifndef ONLINE_JUDGE
freopen ("hangbianyiqi.txt","r",stdin);
#endif

char c,str[300];
int i=0;
while(EOF!=(c=getchar()))//采取文件输入
{
if(c=='#')
{
if(i>0&&str[i-1]!='\n')
{
i--;//退格
}
}
else
{
if(c=='@')//可以先用一数组保存每一个换行符出现的位置,方便查找。
{

while(i>0&&str[--i]!='\n');
i++;
}
else
{
str[i++]=c;
}
}
}
str[i]='\0';
printf("%s\n",str);
return(0);
}


调式的话请在和程序同目录下建一hangbianyiqi.txt文件,里面输入你要测试的字符串.

[此贴子已经被作者于2007-3-11 20:21:34编辑过]


倚天照海花无数,流水高山心自知。
2007-03-11 19:25
快速回复:[讨论]第七次编程题目,大家支持一下
数据加载中...
 
   



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

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