难度标签是普及-,对我这个蒟蒻来说应该是不难完成但是也要费一点劲的)
通读题目,大概理解了题目的需求,输出时第二行输出该运算式的总长度,很容易想到printf函数的返回值
简单来说,输出成功时,printf函数会返回输出的字符数量,包括数字,字母,标点符号,空格,转义字符
以本题的‘a’即加法为例,
k = printf("%d+%d=%d\n", a[i][1], a[i][2], a[i][1] + a[i][2]);
printf("%d\n", k-1);
另外,由于转义字符'\n'也包含在输出内容中,输出总长度k时需要-1,当然,另写一句putchar('\n')也完全可行。
创建一个二维数组用来存储输入的数据,第一个存储abc即运算类型,后两个位置存储运算数据
int a[50][3];
输出就很好写啦:
for (int i = 0; i < n; i++)
{
if (a[i][0] == 'a')
{
k = printf("%d+%d=%d\n", a[i][1], a[i][2], a[i][1] + a[i][2]);
printf("%d\n", k-1);
}
if (a[i][0] == 'b')
{
k = printf("%d-%d=%d\n", a[i][1], a[i][2], a[i][1] - a[i][2]);
printf("%d\n", k-1);
}
if (a[i][0] == 'c')
{
k = printf("%d*%d=%d\n", a[i][1], a[i][2], a[i][1] * a[i][2]);
printf("%d\n", k-1);
}
}
输出解决完后,再来关注本题困住蒟蒻们的一个点
若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。
也就是说,在数据输入时,可能是三个数据,也可能是两个数据,并且后者的情况在输出时还需要用到上一行甚至上n行的第一个数据(运算符)
刚开始写时,我对我该如何储存第一个数据造成了很大的困惑,并且也不知道该如何处理输入只有两个数据时的输出
针对第一个问题,应该有更方便的处理方法,不过我这个蒟蒻只能想到下面这个了
首先
创建一个字符串数组来存储第一个输入
char ch[5];
(没什么好说的)
输入第一个数据时,单独写一个输入
scanf("%s",ch);
不管第一个数据是数字还是字母,都会被一位一位的存储进ch中
判断:
if (ch[0] < 'a' || ch[0]>'c')
/*...*/
else
/*...*/
由于需要判断第一个输入数据是数字,还是'abc'中的某一个,取字符串数组ch的第一个数据出来做判断就可以啦!
接下来是第二个问题,如果输入是两个数据,该如何统一存储进数组a[50][3]方便后续输出呢?
本蒟蒻第一想到的方法是创建一个tmp变量用来“缓存”第一个数据,也就是运算符,如果是三个数据,就把第一个数据存储在tmp变量中;两个数据输入时,便把tmp赋给数组第一个数据;再次遇到三个输入时,更新tmp变量
代码实现:
for (int i = 0; i < n; i++)
{
scanf("%s",ch);
if (ch[0] < 'a' || ch[0]>'c')
{
a[i][0] = tmp;
a[i][1] = atoi(ch);
scanf("%d", &a[i][2]);
}
else
{
a[i][0] = ch[0];
tmp = ch[0];
scanf("%d %d", &a[i][1], &a[i][2]);
}
}
另外,if中出现的atoi()函数的作用是把字符串中的整数提取出来(int),具体使用有特殊的规则~可以自己去查找一下~
蒟蒻代码金刚,合体!(洛谷不要直接复制我的代码哦~)
int main()
{
int n;
scanf("%d", &n);
getchar();
int a[50][3];
int tmp = 0;
char ch[5];
for (int i = 0; i < n; i++)
{
scanf("%s",ch);
if (ch[0] < 'a' || ch[0]>'c')
{
a[i][0] = tmp;
a[i][1] = atoi(ch);
scanf("%d", &a[i][2]);
}
else
{
a[i][0] = ch[0];
tmp = ch[0];
scanf("%d %d", &a[i][1], &a[i][2]);
}
}
int k = 0;
for (int i = 0; i < n; i++)
{
if (a[i][0] == 'a')
{
k = printf("%d+%d=%d\n", a[i][1], a[i][2], a[i][1] + a[i][2]);
printf("%d\n", k-1);
}
if (a[i][0] == 'b')
{
k = printf("%d-%d=%d\n", a[i][1], a[i][2], a[i][1] - a[i][2]);
printf("%d\n", k-1);
}
if (a[i][0] == 'c')
{
k = printf("%d*%d=%d\n", a[i][1], a[i][2], a[i][1] * a[i][2]);
printf("%d\n", k-1);
}
}
return 0;
}
(库的调用懒得打了)