| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4854 人关注过本帖
标题:[讨论]第七次编程题目,大家支持一下
只看楼主 加入收藏
adsl0231
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2006-3-29
收藏
得分:0 
回复:(nuciewth)[讨论]第七次编程题目,大家支持一下...

发错了

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


2007-03-11 14:25
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 

第一题:
#include<stdio.h>
#include<conio.h>
#define N 4
int main(void)
{
int i,j,m,n=0;
short int a_i[50]={0};
char b[N][251]={0},a[50]; /*a[]作用为输入缓冲区*/

for(m=0;m<N;m++)
{ gets(a);
for(i=0;a[i];i++)
{
if(a[i]=='@')
a_i[i]=-1;
if(a[i]=='#')
a_i[i]=-2;
}

for(i--;i>-1;i--)
{
if(a_i[i]==-1)
{
for(j=i;j>-1;j--)
a_i[j]=-3;
}
}

for(i=0;a[i];i++)
{

if(a_i[i]==-2)
{
for(j=i;a_i[j]==-2;j++)
{n++;
a_i[j]=-3;}
for(j=i-1;j>-1&&n;j--)
{
if(a_i[j]>-1)
{a_i[j]=-3;n--;}
}
}
n=0;
}
n=0;
j=0;
for(i=0;a[i];i++)
if(a_i[i]>-1)
{
b[m][j]=a[i];
j++;
}

for(i=0;a[i];i++)
a_i[i]=0;
}

puts("**************************");
for(i=0;i<N;i++)
printf("%s\n",b[i]);
getch();

}

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


2007-03-11 14:52
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
大家讨论的差不多的时候,我把自己写的贴出来.大家继续啊

倚天照海花无数,流水高山心自知。
2007-03-11 18:24
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

楼上的,我大致的明白你的算法了,但是我觉得有点不对
比如说我输入以下的数据:
dddd.......ddd(51个d)@d
d
d
d
那么输出应该是:
d
d
d
d
才是
而你的输出是
(空的)
d
d
d


2007-03-11 18:26
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
以下是引用crackerwang在2007-3-11 18:26:42的发言:

楼上的,我大致的明白你的算法了,但是我觉得有点不对
比如说我输入以下的数据:
dddd.......ddd(51个d)@d
d
d
d
那么输出应该是:
d
d
d
d
才是
而你的输出是
(空的)
d
d
d

说错了,我说的是楼上的楼上,刚好斑竹比我快了那么几秒提交


2007-03-11 18:30
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 
改为这个关系。
short int a_i[251]={0};
char b[N][251]={0}, a[251] /*a[]作用为输入缓冲区*/

[此贴子已经被作者于2007-3-11 18:45:27编辑过]


2007-03-11 18:43
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
收藏
得分:0 
如果要处理范围和输入问题,程序不会几十行解决。

2007-03-11 18:53
zcs302
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2007-3-6
收藏
得分:0 

呵呵,终于弄出来第一题了

2007-03-11 19:05
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

我觉得你要是想用数组来做缓冲同时还想一次处理是不可能做的到的,
我是这样想的,但是也有问题,至少我对输入范围没有限制
#include<stdio.h>//这里只处理一个数组
int main()
{
char a[251];
int i;
i=0;
while(251)
{
a[i]=getche();//我使用getche()直接从控制台读取,因为我是一个一个字符的处理,要是用getchar必须回车
if(a[i]=='\n') //这个就是我的问题所在,我本来是想在这里做一个一行输入结素的判断,
break; //后来发现getche()对回车很感冒
a[i+1]='\0'; //这个都是用来标志数组结尾的
if(a[i]=='#') //代表要是输入的是#就退一个元素写入
{
i-=2;
a[i+1]='\0';
}
if(a[i]=='@')//输入的是@就从新输入
{
i=-1;
a[0]='\0';
}
i++;
if(i==10)
break;
}
printf("\n");
for(i=0;i<10;i++)
printf("%c ",a[i]);
getch();
return(0);
}
有谁能告诉我怎么样输入回车跳出循环?


2007-03-11 19:05
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
以下是引用无玩过界在2007-3-11 18:43:11的发言:
改为这个关系。
short int a_i[251]={0};
char b[N][251]={0}, a[251] /*a[]作用为输入缓冲区*/

那要是我输入的是
ddd......dd(240个)@ddd...d(240个)
你觉得你的输出是什么?
我觉得你的输出应该是:
dd..d(10个)应为你读取只到@后10个d
显然答案不对


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



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

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