社区讨论
本地测试全正常,洛谷全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 条回复,欢迎继续交流。
正在加载回复...