码迷,mamicode.com
首页 > 其他好文 > 详细

PAT-1010(MOOC2-2)

时间:2014-12-18 14:48:36      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   使用   sp   for   

首先贴一下题目:

设计函数求一元多项式的导数。

输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是0,但是表示为“0 0”。

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

建议测试如下几个情况(按Ctrl+Z结束输入):

1. 不以0结尾的(注:不要养成用特殊字符为结束符的习惯,比如用-1,#,!之类的,具体请见下面的代码部分):

  输入:3 4 -5 2 6 1

  输出:12 3 -10 1 6 0

2. 以0 0结尾的:

  输入:3 4 -5 2 6 1 0 0

  输出:12 3 -10 1 0 0

3. 只有0 0的:

  输入:0 0 

  输出:0 0

 先说一下我的解题思路吧。

1. 首先要处理输入的数据,这里我仍然用的是C++中的容器(vector),容器存储的类型就是int。因为这里没有说明要输入多少个,只是说明指数递降。所以我们编程的时候要用while循环输入数据,测试的时候Ctrl+Z终止输入数据。此部分的代码如下:

1     int a, b;
2     vector<int> vec;
3     while(cin>>a>>b)
4     {
5         vec.push_back(a);
6         vec.push_back(b);
7     }

2. 然后是处理数据,这里我新建了一个vector,名为res,只需要一次循环遍历存放输入数据的容器vec即可。此部分的代码如下:

 1 int len = vec.size();
 2     vector<int> res;
 3     for(int i=0; i<len; i=i+2)
 4     {
 5         int a=vec[i];
 6         int b=vec[i+1];
 7         if(a!=0 && b!=0)
 8         {
 9             res.push_back(a*b);
10             res.push_back(b-1);
11         }
12     }

3. 最后是输出数据和处理特殊情况。注意题目中明确要求结尾不能有多余的空格。因此,在循环输出的时候,要判断i=len-1的情况。此部分的代码如下:

 1 len = res.size();
 2     for(int i=0; i<len; i=i+1)
 3     {
 4         if(i!=len-1)
 5             cout << res[i] << " ";
 6         else
 7             cout << res[i];
 8     }
 9     if(len == 0)
10         cout << "0 0";

4. 完整的代码如下:

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int a, b;
 9     vector<int> vec;
10     while(cin>>a>>b)
11     {
12         vec.push_back(a);
13         vec.push_back(b);
14     }
15     int len = vec.size();
16     vector<int> res;
17     for(int i=0; i<len; i=i+2)
18     {
19         int a=vec[i];
20         int b=vec[i+1];
21         if(a!=0 && b!=0)
22         {
23             res.push_back(a*b);
24             res.push_back(b-1);
25         }
26     }
27     len = res.size();
28     for(int i=0; i<len; i=i+1)
29     {
30         if(i!=len-1)
31             cout << res[i] << " ";
32         else
33             cout << res[i];
34     }
35     if(len == 0)
36         cout << "0 0";
37     return 0;
38 }

个人感觉:

  这道题还是比较简单的,如果你不会用容器vector的话,建议自己尝试使用一下。包括list,map,set都是C++常见的容器。vector使用的方法和数组差不多,插入的话用push_back(),读取元素的话直接用下标就可以了(当然如果会用迭代器就更好了)。而且不用考虑数组超界的问题。

按照惯例最后粘一下AC的结果:

bubuko.com,布布扣

 

 

PAT-1010(MOOC2-2)

标签:style   blog   http   io   color   os   使用   sp   for   

原文地址:http://www.cnblogs.com/clevercong/p/4171551.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!