ACM中Runtime Error有关问题!
ACM中Runtime Error问题!!
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
我的代码输入测试值的时候,出现的是这样的情况,也不知道哪里错了
3
100083215800 -------- 3215
1234567890 -------- 234567
200978086 -------- 97
为啥后面那两个值的前几个数没了?
------解决思路----------------------
你可以先去学习一下如何调试,再来解决就好了。去网上找c++调试技术吧。
调试比写代码更重要
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
------解决思路----------------------
网上找得到,c语言刷新缓冲区
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
为啥后面那两个值的前几个数没了?
------解决思路----------------------
你可以先去学习一下如何调试,再来解决就好了。去网上找c++调试技术吧。
调试比写代码更重要
------解决思路----------------------
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
------解决思路----------------------
网上找得到,c语言刷新缓冲区