主题:一道很简单的题目,但是oj过不了,为什么!!
Problem A: 大内密探零零发的密码
东汉末年,群雄割据,益州疲弊。此诚危急存亡之秋也。
大内密探零零发临危受命,到曹营潜伏。 十数年卧薪尝胆,终于打听到曹营当前的士兵总数(num)。
为了让大唐朝了解曹营的军力状况(就是士兵总数num),同时不让曹营之人截获此信时发现其中的奥秘;
聪明的他想到一个好方法:
他把这个数据 num 写在一个由 0~9 组成的超长字符串 S 中;
把这个字符串中的 “8” 看成空格,就能分割出一个个数字(不可能全部都是8)。
其中 num 就是这些数字中的最大值( num<1,000,000,000)。
输入包含多组测试数据。 输入第一行是一个整数T,表示共有T组测试数据(1<=T<=20);
接下来T行,每行为一个由 0~9 组成的字符串S(字符串S长度<=5000);
对于每组测试数据,输出一行,输出用 “8” 分割得到的数字中的最大值。
3 100083215800 1234567890 200978086
3215 1234567 20097
简单描叙一下我的思路,就是得到一串字符串后,一个一个检查,是不是八,不是八就塞到一个临时数组里,然后当遇到八的时候转换成整数,与答案相比那个大,如果大就替换掉,直到最后一个,再执行一次检查,循环结束,输出答案
#include<stdio.h> #include<string.h> char a[5010]; char c[5010]; int answer[21]; main() { int n,j=0;int sum=0,k=1; scanf("%d",&n); int counter=n; while(n--) { //printf("%d",n); scanf("%s",a); for(int i=0;a[i];i++) { check: if(a[i]=='8') { for(int u=strlen(c)-1;u>=0;u--) { sum+=(c[u]-48)*k; k*=10; // printf("%d\n",sum); } if(sum>(answer[n])) {answer[n]=sum; } sum=0; k=1;j=0; memset(c,0,sizeof(c)); continue; } c[j]=a[i]; j++; if(!a[i+1]) { a[i+1]='8';i++; goto check; }
} //printf("%d\n",answer[1]); memset(c,0,sizeof(c)); // answer=-1; } for(int i=counter-1;i>=0;i--) { printf("%d\n",answer[i]); } }