| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1559 人关注过本帖
标题:程序那里错了
只看楼主 加入收藏
flypampas
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-16
收藏
得分:0 

能不能把我上面的那个程序改下??使它能正确的显示答案!


java,c++...thinking......
2006-09-23 18:27
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
可以,不过把你的思想在你的函数中注明

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-23 18:59
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
以下是引用flypampas在2006-9-22 16:27:46的发言:

/*
设一个环上有编号为 0~n-1 的 n 粒不同颜色的珠子
( 每粒珠子颜色用字母表示,n 粒珠子的颜色由输入的字符串表示)。
将环中某两粒珠子间剪开,环上珠子形成一个序列,然后按以下规则从序列
中取走珠子:首先从序列左端取走所有连续同色珠子;然后从序列右端在剩
下珠子中取走所有连续同色珠子,两者之和为该剪开处可取走珠子的粒数
。在不同位置剪开,能取走的珠子数不尽相同。
  本程序所求的是在环上哪个位置剪开,按上述规则可取
走的珠子粒数最多。程序中用数组存储字符串。例如,10 粒珠
子颜色对应字符串为"aaabbbadcc",从 0 号珠子前剪开,
序列为 aaabbbadcc,从左端取走 3 粒 a 色珠子,从右端取走 2 粒 c 色珠子,
共取走 5 粒珠子。若在 3 号珠子前剪开,即 bbbadccaaa 共可取走 6 粒珠子。
*/

#include<iostream>
#include<cstring>
using namespace std;

int count(char *s,int start,int end)
{
int i,c=0;
int step=(start>end)?-1:1;
char color=s[start];
for(i=start;s[i]==color;i+=step)
{
if((step>0&&i>end)||(step<0&&i<end)) break;
c++;
}
return c;
}

int main()
{
char t,s[120];
int i,j,c,len,maxc,cut=0;
cout<<"请输入环上代表不同颜色珠子字符串:";
cin>>s;
len=strlen(s);
maxc=0;
for(i=0;i<len;i++)
{
c=count(s,0,len-1);
if(c<len) c+=count(s,len-1,0);
if(c>maxc)
{
cut=i;
maxc=c;
}
t=s[0]; // 从这里开始的字符串移动位置有问题,你可以在s[j]=t;后加cout<<s; 看看每次移动字符串的变化
for(j=1;j<len;j++)
s[j-1]=s[j];
s[j]=t;

// cout<<s<<endl;
}
cout<<cut<<endl<<maxc<<endl;
return 0;
}
希望不要改变我的思想,帮我该下这个小程序。在下不胜感激!!

其他的地方都没有错,就是字符串移动那里有问题
那里不是说移动顺序不对,是字符串有溢出的出现异常,结束标志应该是'\0'
.... ....
还有这个程序不完善 在得到同样的珠子的情况下应该输出所有的cut位置...


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-09-24 12:56
DEMON_HUNTER
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-3-10
收藏
得分:0 

#include<iostream>
#include<cstring>
using namespace std;

int count(char *s,int start,int end)
{
int i,c=0;
int step=(start>end)?-1:1;
char color=s[start];
for(i=start;s[i]==color;i+=step)
{
if((step>0&&i>end)||(step<0&&i<end)) break;
c++;
}
return c;
}

int main()
{
char t,s[120];
int i,j,c,len,maxc,cut=0;
cout<<"请输入环上代表不同颜色珠子字符串:";
cin>>s;
len=strlen(s);
cout<<len<<endl;
getchar();
maxc=0;
for(i=0;i<len;i++)
{
c=count(s,0,len-1);
if(c<len) c+=count(s,len-1,0);
if(c>maxc)
{
cut=i;
maxc=c;
}
t=s[0];
for(j=1;j<len;j++)
s[j-1]=s[j];
//s[j]=t; 此处交换时,j已经变成len 而不是len-1,因此字符串的循环交替出现了问题
s[j-1]=t;
cout<<s<<endl;
getchar();
}
cout<<cut<<endl<<maxc<<endl;
return 0;
}

原来的程序写的不错!


2006-09-24 13:18
flypampas
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-9-16
收藏
得分:0 

非常感谢14楼的,那里改过来程序大致就好了。我看了好久都没有看出来啊,原来是这里错了,谢谢指点!
当然也要感谢上面回帖的人。
他们的方法也使我明白了许多。
-----------------------------
回13楼的:移动不讳产生异常,那只是移动s[120]中的一部分。我的程序还是楼上那个说的那一点。
得到同样的珠子的情况下输出所有的cut位置我想应该好实现。好像只需要定义cur[]数组应该可以解决吧!


java,c++...thinking......
2006-09-25 01:18
great_zlj
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-9-23
收藏
得分:0 
为什么头文件是这样,#include<iostream>
#include<cstring>
using namespace std;
而改成这样就不对,#include<iostream.h> #include<string.h>
2006-10-09 20:40
kular
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-30
收藏
得分:0 
回复 10楼 wangxiang
能不能写一下你的算法分析
2011-06-30 18:42
快速回复:程序那里错了
数据加载中...
 
   



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

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