其他分享
首页 > 其他分享> > PAT (Advanced Level) Practice A与B的爱恨情仇 1001,1002,1009

PAT (Advanced Level) Practice A与B的爱恨情仇 1001,1002,1009

作者:互联网

题目链接:

1001:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400

1002:https://pintia.cn/problem-sets/994805342720868352/problems/994805526272000000

1009:https://pintia.cn/problem-sets/994805342720868352/problems/994805509540921344

较为简单的三个模拟题,按照顺序来讲

1001:

题目要求计算a+b的值并且每三个数用一个“,”隔开,类似这样的

输入:

-1000000 9

输出:

-999,991

解题方法:要达到每三位输出一个',‘的目的,就要分解结果一个个输出,但是在进行取余和除法运算的时候存进数组的顺序是逆序的,用一个栈替代数组就够了,然后控制格式并且每三个输出一个',’

就可以了;

当然要注意几个细节就是计算出的结果可能是负数,在输出的时候就要注意正数和负数的输出问题了

AC代码:

 1 # include<bits/stdc++.h>//pta甲级1001
 2 using namespace std;
 3 int a,b;
 4 stack<int>s;
 5 int main() {
 6     cin >> a;
 7     cin >> b;
 8     int sum = a + b;
 9     int tem;
10     if (sum < 0) {
11         //如果是负数 输出负号
12         cout << '-';
13         sum = sum * (-1);
14     }
15     if (sum == 0) {
16         cout << 0;
17     }
18     while (sum != 0) {
19         //每三位数字一组开始进行分组
20         tem = sum % 1000;
21         s.push(tem);
22         sum = sum / 1000;
23     }
24     //利用栈进行数据的保存,后进先出来满足条件。
25     if (!s.empty()) {
26         printf("%d", s.top());
27         s.pop();
28     }
29     while (!s.empty()) {
30         printf(",%03d", s.top());
31         s.pop();
32     }
33     return 0;
34 }

1002:

题目大意是让我们解决两个多项式相加的问题

给出的输入是这样的格式:

第一个多项式:该多项式的项数,第i项,系数,第i-1项,系数。。。。。。

第二个多项式:

该多项式的项数,第j项,系数,第j-1项,系数。。。。。。

解法是按照题目要求进行输入下标和系数然后进行模拟相加并且和格式控制 AC代码:
 1 #include<bits/stdc++.h>//pta甲级1002
 2 using namespace std;
 3 const int num=1010;
 4 int k1;
 5 int k2;
 6 int cnt;
 7 double ans[num];
 8 int main()
 9 {
10     scanf("%d",&k1);
11     for( int i=0;i<k1;i++)
12     {
13         int tip;
14         double tmp;
15         scanf("%d %lf",&tip,&tmp);//第一个下标和系数
16         ans[tip]=tmp;
17     }
18     scanf("%d",&k2);
19     for( int j=0;j<k2;j++)
20     {
21         int tip;
22         double tmp;
23         scanf("%d %lf",&tip,&tmp);//第二个多项式下标和系数
24         ans[tip]+=tmp;//相加运算
25         
26     }
27     for( int i=0;i<num;i++)
28     {
29         if(ans[i]//统计多少个非0项
30         {
31             cnt++;
32         }    
33     }
34     printf("%d",cnt);
35     for( int i=num-1;i>=0;i--)
36     {
37         if(ans[i])
38         printf(" %d %.1f",i,ans[i]);
39     }
40     return 0;
41 }

1009:

题目大意多项式相乘;

需要注意的几个点是存储答案的数组要开到2k以上因为两个最高次为1k的多项式相乘最高次幂可以达到2K

 1 #include<bits/stdc++.h>//pta甲级1009
 2 using namespace std;
 3 const int num=1010;
 4 struct node
 5 {
 6     int zhishu;
 7     double xishu;
 8 }poly[num];
 9 double ans[2010];
10 int n,m;
11 int cnt;
12 int main()
13 {
14     scanf("%d",&n);
15     for(int i=0;i<n;i++)
16     {
17         scanf("%d %lf",&poly[i].zhishu,&poly[i].xishu);
18     }
19     scanf("%d",&m);
20     for(int i=0;i<m;i++)
21     {
22         int tip;
23         double tmp;
24         scanf("%d %lf",&tip,&tmp);
25         for(int j=0;j<n;j++)
26         {
27             ans[tip+poly[j].zhishu]+=(tmp*poly[j].xishu);//同第一个多项式的每一项相乘
28         }
29     }
30     for(int i=0;i<=2000;i++)
31     {
32         if(ans[i]!=0.0)
33         cnt++;
34     }
35     printf("%d",cnt);
36     for(int i=2000;i>=0;i--)
37     {
38         if(ans[i]!=0.0)
39         printf(" %d %.1f",i,ans[i]);
40     }
41     return 0;
42 }

 

 

标签:输出,PAT,Level,int,多项式,情仇,num,1009,ans
来源: https://www.cnblogs.com/LQS-blog/p/16410408.html