写在前面
sample output真就离谱!
我想问:3 * Z ^ 0 导数等于3 ?你让3 * Z ^ 1导数等于几 ?
还真能有不少accepted。。。
本文代码正确输出,不能accepted
Description:
由于龙王阿尔法有天然对群龙的意念操控能力,往往阿尔法走到哪,它的周围一圈都会有各种各样的龙绕着它飞行。
驯龙高手讲的是古代维京人的魔幻故事,却暗合了当代人类全球化生存状况的节拍。无论银幕上下,世界和平要依靠年轻一代来努力,都是不言而喻的事实。现在,全球某工商的著名计算机图像学Ph.D想好好研究每只龙的飞行属性。
已知每只龙的飞行方程,可简化为二维平面内的方程。现给出方程,求出求导后的方程形式。不过,调皮的Ph.D 为了让科研过程变得更有趣,他会给出一系列飞龙的飞行方程,其中,可能会存在这样的情况:“x^2+ y^3 + 4* x ^ 2”,也就是说,“x”可能会重复出现,不过不会存在不相同指数的x,详细的输入格式,请参照如下Input。
身为年轻英勇的维京勇士小嗝嗝的你,能帮助我们全球某工商著名计算机图像学Ph.D解答这个问题吗?
Input:
有多组数据测试,以输入 0 结束。
第一行输入一个数字 t ,表示接下来有 t 行输入,分别代表 t 只飞龙的飞行方程。每一行的输入格式如下:“3X 2 6 Y 5 3 Z 2”表示飞行方程:“3x^2+ 6y^5 + 3 * z ^2”,同样,会存在如下的输入:“1X 3 2 X 3 6 Y 2 3 Z 0”表示飞行方程:“3* x ^ 3 + 6 * y ^ 2 + 3 * z ^ 0”。并保证每行相对应的输出为“a* x ^ (n1) + b * y ^ (n2) + c * z ^ (n3)”,输入的各项系数和次数都为0~ 9的数字,以及输入只会有“X”、“Y”和“Z”三个字母。输入一行不会超过2000个字符长度。输入数据均在int范围内。(若出现幂次为0,则视为1。)
Output:
对于每组测试,输出“Case#k: ”,首先,k从1开始标号。
对于每个飞行方程,输出“a* x ^ (n1) + b * y ^ (n2) + c * z ^(n3)”表示求导后的结果。详细参见样例,每行中会存在空格,注意空格的输出控制。
Sample Input:
2
1 X 3 2 X 3 6 Y 2 3 Z 0
3 X 2 6 Y 5 3 Z 2
4
9 X 9 9 X 9 9 X 9 9 X 9 9 X 9
9 X 9 9 Y 9
9 X 9 9 Z 9
9 Y 9 9 Z 9
0
Sample Output:
Case #1:
9 * X ^ 2 + 12 * Y ^ 1 + 3
6 * X ^ 1 + 30 * Y ^ 4 + 6 * Z ^ 1
Case #2:
405 * X ^ 8
81 * X ^ 8 + 81 * Y ^ 8
81 * X ^ 8 + 81 * Z ^ 8
81 * Y ^ 8 + 81 * Z ^ 8
#include <iostream>
#include "vector"
#include "string"
using namespace std;
/**
* [Jeremy Wu]群龙的飞行方程
* kkmd66
* @return
*/
int main() {
int t;
int count = 1;
//判定循环
while (cin >> t && t != 0) {
//装填输入
vector<string> function;
string str;
for (int i = 0; i < t + 1; ++i) {
getline(cin, str);
function.push_back(str);
}
//查找同类项,填充同类项
vector<vector<int>> x_pos(t);
vector<vector<int>> y_pos(t);
vector<vector<int>> z_pos(t);
for (int i = 0; i < function.size() - 1; ++i) {
for (int j = 2; j < function[i + 1].size(); j++) {
if (function[i + 1][j] == 'X') {
x_pos[i].push_back(j);
}
if (function[i + 1][j] == 'Y') {
y_pos[i].push_back(j);
}
if (function[i + 1][j] == 'Z') {
z_pos[i].push_back(j);
}
}
}
cout << "Case #" << count << ":" << endl;
//合并同类项,求导,输出
//系数
int x_xishu = 0;
int y_xishu = 0;
int z_xishu = 0;
//阶数
int x_jieshu = 0;
int y_jieshu = 0;
int z_jieshu = 0;
//合并同类项
for (int i = 0; i < t; ++i) {
for (int j = 0; j < x_pos[i].size(); ++j) {
x_xishu += (function[i + 1][x_pos[i][j] - 2]) - '0';
if (x_xishu != 0)
x_jieshu = (function[i + 1][x_pos[i][j] + 2]) - '0';
}
for (int j = 0; j < y_pos[i].size(); ++j) {
y_xishu += (function[i + 1][y_pos[i][j] - 2]) - '0';
if (y_xishu != 0) {
y_jieshu = (function[i + 1][y_pos[i][j] + 2]) - '0';
}
}
for (int j = 0; j < z_pos[i].size(); ++j) {
z_xishu += (function[i + 1][z_pos[i][j] - 2]) - '0';
if (z_xishu != 0) {
z_jieshu = (function[i + 1][z_pos[i][j] + 2]) - '0';
}
}
//求导,只有一阶及其以上才可求导,否则直接置零
if (x_jieshu > 0) {
x_xishu *= x_jieshu;
x_jieshu--;
} else {
x_jieshu = 0;
x_xishu = 0;
}
if (y_jieshu > 0) {
y_xishu *= y_jieshu;
y_jieshu--;
} else {
y_jieshu = 0;
y_xishu = 0;
}
if (z_jieshu > 0) {
z_xishu *= z_jieshu;
z_jieshu--;
} else {
z_jieshu = 0;
z_xishu = 0;
}
//格式输出
if (x_xishu == 0 && y_xishu != 0 && z_xishu != 0) {
if (y_jieshu == 0 && z_jieshu == 0) {
cout << y_xishu << " + " << z_xishu;
}
if (y_jieshu != 0 && z_jieshu != 0) {
cout << y_xishu << " * Y ^ " << y_jieshu << " + " << z_xishu << " * Z ^ " << z_jieshu;
}
if (y_jieshu == 0 && z_jieshu != 0) {
cout << y_xishu << " + " << z_xishu << " * Z ^ " << z_jieshu;
}
if (y_jieshu != 0 && z_jieshu == 0) {
cout << y_xishu << " * Y ^ " << y_jieshu << " + " << z_xishu;
}
}
if (y_xishu == 0 && x_xishu != 0 && z_xishu != 0) {
if (x_jieshu != 0 && z_jieshu != 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << z_xishu << " * Z ^ " << z_jieshu;
if (x_jieshu != 0 && z_jieshu == 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << z_xishu;
if (x_jieshu == 0 && z_jieshu != 0)
cout << x_xishu << " + " << z_xishu << " * Z ^ " << z_jieshu;
if (x_jieshu == 0 && z_jieshu == 0)
cout << x_xishu << " + " << z_xishu;
}
if (z_xishu == 0 && x_xishu != 0 && y_xishu != 0) {
if (x_jieshu != 0 && y_jieshu != 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << y_xishu << " * Y ^ " << y_jieshu;
if (x_jieshu == 0 && y_jieshu != 0)
cout << x_xishu << " + " << y_xishu << " * Y ^ " << y_jieshu;
if (x_jieshu != 0 && y_jieshu == 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << y_xishu;
if (x_jieshu == 0 && y_jieshu == 0)
cout << x_xishu << " + " << y_xishu;
}
if (x_xishu == 0 && y_xishu == 0 && z_xishu != 0) {
if (z_jieshu != 0)
cout << z_xishu << " * Z ^ " << z_jieshu;
if (z_jieshu == 0)
cout << z_xishu;
}
if (x_xishu == 0 && z_xishu == 0 && y_xishu != 0) {
if (y_jieshu != 0)
cout << y_xishu << " * Y ^ " << y_jieshu;
if (y_jieshu == 0)
cout << y_xishu;
}
if (x_xishu != 0 && y_xishu == 0 && z_xishu == 0) {
if (x_jieshu != 0)
cout << x_xishu << " * X ^ " << x_jieshu;
if (x_jieshu == 0)
cout << x_xishu;
}
if (x_xishu != 0 && y_xishu != 0 && z_xishu != 0) {
if (x_jieshu != 0 && y_jieshu != 0 && z_jieshu != 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << y_xishu << " * Y ^ " << y_jieshu << " + "
<< z_xishu
<< " * Z ^ " << z_jieshu;
if (z_jieshu == 0 && y_jieshu != 0 && x_jieshu != 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << y_xishu << " * Y ^ " << y_jieshu << " + "
<< z_xishu;
if (z_jieshu != 0 && y_jieshu == 0 && x_jieshu != 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << y_xishu << " + "
<< z_xishu
<< " * Z ^ " << z_jieshu;
if (z_jieshu != 0 && y_jieshu != 0 && x_jieshu == 0)
cout << x_xishu << " + " << y_xishu << " * Y ^ " << y_jieshu << " + "
<< z_xishu
<< " * Z ^ " << z_jieshu;
if (x_jieshu != 0 && y_jieshu == 0 && z_jieshu == 0)
cout << x_xishu << " * X ^ " << x_jieshu << " + " << y_xishu << " + "
<< z_xishu;
if (x_jieshu == 0 && y_jieshu != 0 && z_jieshu == 0)
cout << x_xishu << " + " << y_xishu << " * Y ^ " << y_jieshu << " + "
<< z_xishu;
if (x_jieshu == 0 & y_jieshu == 0 && z_jieshu != 0)
cout << x_xishu << " + " << y_xishu << " + "
<< z_xishu
<< " * Z ^ " << z_jieshu;
if (x_jieshu == 0 && y_jieshu == 0 && z_jieshu == 0)
cout << x_xishu << " + " << y_xishu << " + "
<< z_xishu;
}
x_xishu = 0;
y_xishu = 0;
z_xishu = 0;
x_jieshu = 0;
y_jieshu = 0;
z_jieshu = 0;
cout << endl;
}
count++;
}
}