当我没有针对输入字符串为单个数字优化时,65分,代码如下
#include <stdio.h>
void op(int n,char *a);
int main() {
char a[127] = { '0' }, t[127] = { '0' }, r[127] = { '0' };
int b = 0, i = 0, q = 126;
scanf("%s", a);
for (i = 0; a[i]; i++) {
switch (a[i]) {
case '/': b = 1; q = i;
break;
case '.': b = 2; q = i;
break;
case '%': b = 3; q = i;
}
}
if (b != 0) {
for (int k = 0; k < q; k++) {
t[k] = a[k];
}
for (int k = q + 1; k <= i; k++) {
r[k-q-1] = a[k];
}
op(q,t);
switch (b) {
case 1: printf("/");
op(q,r);
break;
case 2: printf(".");
op(q,r);
break;
case 3: printf("%%");
}
}
if (b == 0) op(q,a);
return 0;
}
void op(int n,char* a) {
int i = n, j = 126, k = 0;
char c[127] = { '0' };
for (; (a[i] == '0'&& i >= 0)||(a[i] == 0 && i >= 0); i--);
j = i;
for (; i >= 0; --i) c[j - i] = a[i];
for (; (c[j] == '0' && j >= 0) || (c[j] == 0 && j >= 0); --j);
for (; k<=j; k++) {
printf("%c", c[k]);
}
}
当我针对字符串为0的优化时(当时是看到第五个点后知后觉意识到的),是打算在前边加入特判
if (a[0] = '0' && a[1] == 0) {
printf("0");
return 0;
}
即
#include <stdio.h>
void op(int n,char *a);
int main() {
char a[127] = { '0' }, t[127] = { '0' }, r[127] = { '0' };
int b = 0, i = 0, q = 126;
scanf("%s", a);
if (a[0] = '0' && a[1] == 0) {
printf("0");
return 0;
}
for (i = 0; a[i]; i++) {
switch (a[i]) {
case '/': b = 1; q = i;
break;
case '.': b = 2; q = i;
break;
case '%': b = 3; q = i;
}
}
if (b != 0) {
for (int k = 0; k < q; k++) {
t[k] = a[k];
}
for (int k = q + 1; k <= i; k++) {
r[k-q-1] = a[k];
}
op(q,t);
switch (b) {
case 1: printf("/");
op(q,r);
break;
case 2: printf(".");
op(q,r);
break;
case 3: printf("%%");
}
}
if (b == 0) op(q,a);
return 0;
}
void op(int n,char* a) {
int i = n, j = 126, k = 0;
char c[127] = { '0' };
for (; (a[i] == '0'&& i >= 0)||(a[i] == 0 && i >= 0); i--);
j = i;
for (; i >= 0; --i) c[j - i] = a[i];
for (; (c[j] == '0' && j >= 0) || (c[j] == 0 && j >= 0); --j);
for (; k<=j; k++) {
printf("%c", c[k]);
}
}
结果反而只得了测试点5的分,变成了5分......
后边我试着在op
函数内优化,加个if——else
的逻辑,删除了前面的特判,结果变成了90,但仍有wa,如下
#include <stdio.h>
void op(int n,char *a);
int main() {
char a[127] = { '0' }, t[127] = { '0' }, r[127] = { '0' };
int b = 0, i = 0, q = 126;
scanf("%s", a);
for (i = 0; a[i]; i++) {
switch (a[i]) {
case '/': b = 1; q = i;
break;
case '.': b = 2; q = i;
break;
case '%': b = 3; q = i;
}
}
if (b != 0) {
for (int k = 0; k < q; k++) {
t[k] = a[k];
}
for (int k = q + 1; k <= i; k++) {
r[k-q-1] = a[k];
}
op(q,t);
switch (b) {
case 1: printf("/");
op(q,r);
break;
case 2: printf(".");
op(q,r);
break;
case 3: printf("%%");
}
}
if (b == 0) op(q,a);
return 0;
}
void op(int n,char* a) {
int i = n, j = 126, k = 0;
char c[127] = { '0' };
for (; (a[i] == '0'&& i >= 0)||(a[i] == 0 && i >= 0); i--);
j = i;
if (a[1]==0) printf("%c", a[0]);
else {
for (; i >= 0; --i) c[j - i] = a[i];
for (; (c[j] == '0' && j >= 0) || (c[j] == 0 && j >= 0); --j);
for (; k <= j; k++) {
printf("%c", c[k]);
}
}
}
我自己在vs里琢磨,发现开始是100000%
这类会出现只有%
的输出情况,但是后来输啥都乱码了,给我整不会了,但又不知道该怎么办......
想问下各位,能不能帮我看看我最后面的代码错在了哪......谢谢了,这题整了好久没整明白......