ACM中Runtime Error问题!!

Hugh_OverAc 2014-12-12 02:34:18
1095: 大内密探零零发的密码

--------------------------------------------------------------------------------

Description
东汉末年,群雄割据,益州疲弊。此诚危急存亡之秋也。

大内密探零零发临危受命,到曹营潜伏。 十数年卧薪尝胆,终于打听到曹营当前的士兵总数(num)。

为了让大唐朝了解曹营的军力状况(就是士兵总数num),同时不让曹营之人截获此信时发现其中的奥秘;

聪明的他想到一个好方法:

他把这个数据 num 写在一个由 0~9 组成的超长字符串 S 中;

把这个字符串中的 “8” 看成空格,就能分割出一个个数字(不可能全部都是8)。

其中 num 就是这些数字中的最大值( num<1,000,000,000)。

Input
输入包含多组测试数据。 输入第一行是一个整数T,表示共有T组测试数据(1<=T<=20);

接下来T行,每行为一个由 0~9 组成的字符串S(字符串S长度<=5000);

Output
对于每组测试数据,输出一行,输出用 “8” 分割得到的数字中的最大值。

Sample Input
3
100083215800
1234567890
200978086

Sample Output
3215
1234567
20097

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

int Change(int a[],int n);
int main()
{
char str[1001]={'\0'};
int i,j,n,len,len1;
while(scanf("%d",&len)!=EOF)
{
len1=0;
while(len1<len){
int num[1001]={0};
n=0;
getchar();
gets(str);
for(i=0;i<strlen(str);i++)
{
if(str[i]!='8')
{
num[n]=num[n]*10+(str[i]-'0');
}
else
n++;
}
if(str[strlen(str)-1]!='8')
{
Change(num,n);
}
else
{
Change(num,n-1);
}
len1++;
}
}
return 0;
}
int Change(int a[],int n)
{
int i,temp=a[0];
for(i=0;i<=n;i++)
{
if(a[i]>temp)
{
temp=a[i];
}
}
printf("%d\n",temp);
return 0;
}

我的代码输入测试值的时候,出现的是这样的情况,也不知道哪里错了
3
100083215800 -------- 3215
1234567890 -------- 234567
200978086 -------- 97
为啥后面那两个值的前几个数没了?

...全文
178 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
FightForProgrammer 2014-12-12
  • 打赏
  • 举报
回复
网上找得到,c语言刷新缓冲区
赵4老师 2014-12-12
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
Hugh_OverAc 2014-12-12
  • 打赏
  • 举报
回复
引用 3 楼 FightForProgrammer 的回复:
引用 2 楼 whm546877424 的回复:
[quote=引用 1 楼 FightForProgrammer 的回复:] 你这样的自己调试啊。肯定是越界的问题
。我不会调试。。怎么做来着?
你可以先去学习一下如何调试,再来解决就好了。去网上找c++调试技术吧。 调试比写代码更重要[/quote] 多谢!我知道了,是getchar()的问题,把gtes(str),改成scanf(" %s",str),就好啦,但是如果我想用gets()要怎么去掉缓冲区的'\n’,又不影响结果呢?
while(scanf("%d",&len)!=EOF)
    {
        len1=0;
        while(len1<len){
        int num[1001]={0};
        n=0;
        scanf(" %s",str);
        for(i=0;i<strlen(str);i++)
FightForProgrammer 2014-12-12
  • 打赏
  • 举报
回复
引用 2 楼 whm546877424 的回复:
引用 1 楼 FightForProgrammer 的回复:
你这样的自己调试啊。肯定是越界的问题
。我不会调试。。怎么做来着?
你可以先去学习一下如何调试,再来解决就好了。去网上找c++调试技术吧。 调试比写代码更重要
Hugh_OverAc 2014-12-12
  • 打赏
  • 举报
回复
引用 1 楼 FightForProgrammer 的回复:
你这样的自己调试啊。肯定是越界的问题
。我不会调试。。怎么做来着?
FightForProgrammer 2014-12-12
  • 打赏
  • 举报
回复
你这样的自己调试啊。肯定是越界的问题

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧