1010 一元多项式求导 (25 point(s))

// 19 points
#include <bits/stdc++.h> 
using namespace std;

int main(){
	int k1, e1, first = 0;
	while(scanf("%d %d", &k1, &e1) != EOF){
		int k2 = k1 * e1, e2 = e1 - 1;
		
		if(e2 >= 0) 
			cout << (first ? " " : "") << k2 << " " << e2;
        else if(k2 == 0 && e2 == 0) cout << (first ? " " : "") << 0 << " " << 0;
		first++;
	}
}
// 25 points
#include <bits/stdc++.h>
using namespace std;

int main() {
	int c, e, first = 0;
	cin >> c >> e;
	if(!c || !e) cout << 0 << " " << 0;
	else cout << c * e << " " << e - 1;
	while(cin >> c >> e) {
		if(e != 0) cout << " " << c * e << " " << e - 1;
	}
}

当时想的果然是 0 相关的问题,但不知道代码应该怎么表达。果然还是考虑的角度不够具体。

当时尝试测试了 1 0 和 0 1 ,发现代码没有任何输出的时候就觉得这部分有问题了。然后尝试改指数和系数中判断是否为 0 的部分,但是改成 || 对了本来错的测试点,却又让样例过不了了,改成 && 过了样例,又卡了两个测试点得了 19 分。想不通遂放弃。


参考了别人的思路,又看了看样例和上面的 1 0 0 1 特别是样例 -2 0 部分,感觉有点明白差别在哪里了。可以看到当存在多个多项式的时候,指数为 0 的情况是不输出的。

而如果只有一个多项式,并且得到的结果可能为 0 的时候,比如上面的 c 0 ,或者hi 0 e 的时候,那么你结果就需要表示出来而不能不输出了。

结合别人说的,当指数为 0 的时候,跟前面的系数撑起来就变成 0 了,但是如果前面还有其他多项式时候的情况,这个 0 是否表达并不重要,就像我们平时写 x^2 + 2x + 1 不会还会在后面多写一个 0 。但是如果对 C 常数求导的话,不能说什么也不写,因为其结果就是 0 你还得把他表达出来。

所以我们可以看到这两个关键在于,一个多项式以及多个多项式时 0 的不同的表达的情况。

上一篇:列表&元素&字典


下一篇:面试 -- ListView对其指定的子Item进行单独的刷新