网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月01日漏签0天
c语言吧 关注:798,915贴子:4,357,906
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 6回复贴,共1页
<<返回c语言吧
>0< 加载中...

oj一直显示Output Limit Exceeded

  • 只看楼主
  • 收藏

  • 回复
  • 晚树
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

二楼放代码


  • 晚树
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<stdio.h>
#include<string.h>
int main(){
char a[200];
while(gets(a)!=NULL){
int i;
for(i=0;i<strlen(a);i++){
if(a[i]==' '){
a[i]='_';
}
if(a[i]>=97){
a[i]=a[i]-32;
}
}
int count=0;
int j;
for(i=0;i<strlen(a);i++){
if(a[i]!='_'){
for(j=i+1;j<strlen(a);j++){
if(a[i]==a[j]){
count++;
a[j]='a';
}
}
}
}
printf("%s",a);
int cnt=0;
for(i=0;i<strlen(a);i++){
if(a[i]=='_'){
cnt++;
}
}
int t=strlen(a)-count-cnt;
if(t>10){printf("No");
}else{
printf("Yes");
}
}}


2025-08-01 21:16:21
广告
不感兴趣
开通SVIP免广告
  • 逢部祝
  • 强能力者
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
问题有好多,一个一个说:
1. 题目指出字符串长度不超过200,但你不能定义一个长度恰好为200的字符串数组,因为如果输入字符串的长度恰好为200,数组需要201个字符去存储它(200个字符加末尾的\0),数组越界的危险是很大的。
2. 循环里用strlen(a)作为循环上限,虽然没有逻辑错误,但是效率太低,如果编译器不做优化,每次循环指标加1后都会执行一次strlen(a),这个函数的耗时和字符串长度成正比。合适的做法是先用一个变量存下strlen(a),然后在循环内使用这个变量作为上限。
3. 大小写字母转换那个地方,用数字97、32虽然没有逻辑错误,但是会额外增加记忆的负担以及阅读者(比如想给你代码指出问题的人)的麻烦,建议把97改成'a',把32改成('a'-'A’),这样既不需要刻意记住两个特殊的数字,又可以让读代码的人一眼看出你这么写的意图。
4. 统计重复字符那里,能看出楼主的想法是把所有重复出现的字符都设置成'a',但是这在逻辑上是有问题的,如果字符串里出现了10个'A',后面9个'A'会被你改成'a',但是等到外层循环的i移动到'a'出现的位置时,你的程序会判断字符串后面的部分有没有跟'a'重复的字符,这显然是错误的,'a'已经被你改过了,不能再参加重复字符的判断了。
5. 输出yes或者no的逻辑也写错了,能看得出来你的想法是把字符串中的空格和重复字符都去掉,然后去看剩下多少个字符,但这只是题目要求的一个条件(字符种类数不超过10),还有另一个条件(单词数不超过10)没有体现在你的代码里。
6. 建议代码可以写在一个缩进良好的编辑器里面,然后截一个高清的图放上去,直接粘贴过来的代码没有缩进,导致大括号的匹配错误(如果有的话)很难被发现,这对找代码问题是很不利的。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示