社区讨论

本地测试全正常,洛谷全wa

P1957口算练习题参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo7fm4j5
此快照首次捕获于
2023/10/27 01:01
2 年前
此快照最后确认于
2023/10/27 01:01
2 年前
查看原帖

本地测试全正常,洛谷全wa

上代码
C
#include <stdio.h>
int i,x,y;
char fh;
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }

int main()
{
    int (*arr[3])(int, int) = {add, sub, mul};  // 定义一个函数指针数组
    char brr[3] = {'+', '-', '*'};  // 定义一个字符数组
    int (*p)(int, int) = arr[0]; // 定义一个可以变化的函数指针

    int i; // 读入i,
    scanf("%d", &i);

    char fh,c;  // 记录符号,和符号字符
    scanf("%c", &fh);  // 读入换行符号
    // p = arr[fh - 'a'];
    // char c = brr[fh - 'a'];

    while(i--){

        scanf("%c", &fh); // 读取一个符号,有可能是一个数字,或者一个符号
        if(fh == 'a' || fh == 'b' || fh == 'c'){  // 如果是符号
            p = arr[fh - 'a'];
            c = brr[fh - 'a']; // 更新 函数指针和 符号
            scanf("%d%d", &x, &y);  // 更新,x,y的值
        }else{  // 读入一个符号不是符号
            int t = (int)(fh - '0');  // 获取这个数字的值
            scanf("%d%d", &x, &y);  // 更新x,y ,x需要单独处理
            int m = x;  // 让m替换x,处理m,需要保留x的值
            while(m){
                t *= 10;
                m /= 10;
            }
            x = x + t;  // 获取x真正的值
        }
        int k = printf("%d%c%d=%d\n", x, c, y, p(x, y));  // k记录打印的字符数,printf额外的功能
        printf("%d\n", k - 1);// 会多记录一个换行符号,去掉
        scanf("%c", &fh);  // 读取换行符号
    }

    return 0;
}
使用了函数指针写法,看了大家的题解目前还没有这样写过的 不明白洛谷的评测机制怎么样, 题目要求要打印算式的长度,我写的时候没有看到这一点,但在最后写的时候突然想到printf好像有个返回值记录打印字符的个数,我就直接利用了这个返回值, 本地测试一下似乎没有问题,但是洛谷已提交全部wa

回复

2 条回复,欢迎继续交流。

正在加载回复...