PAT (Advanced Level) Practice 1002 A+B for Polynomials

版权声明:转载请注明出处https://blog.csdn.net/hhmy77 https://blog.csdn.net/hhmy77/article/details/88828621

在这里插入图片描述
emmmm…一道蛮简单的题目 我却做了很久
1.主要是我不太熟悉memset,没有初始化完数组,干脆以后直接用初始化默认赋值吧
2.由于要统计多项式总数,我用了一个flag数组,每次读入一个数就标记就+1,然后如果判断标记等于1总数就+1(读入多个同一项的话能保证总数只加一次),如下图注释,但是不知道为什么一直通过不了案例,按理来说逻辑没问题吧…
在这里插入图片描述
3. 后面我在输入过程中用一个变量maxn来存最大值,但是我在统计总数的时候却错误的把i<maxn作为for循环的条件,这样做肯定会漏掉的数的
AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	//错误原因 memset 和数组下标 
	int N=0;
	float ary[1010]={0};
	int maxn=0;
	int cnt=0;
	for(int i=0;i<2;i++)
	{
		cin>>N;
		for(int j=0;j<N;j++)
		{
			int a;
			float b;
			scanf("%d %f",&a,&b);
			ary[a]+=b;
			if(a>maxn)maxn=a; 
		}
	}
	//这里用i<maxn的话就错了 因为maxn是要访问到的 不然一直报错
//	for(int i=0;i<maxn;i++)
	//保守一点就直接遍历完吧 反正数据量也不大 
	for(int i=0;i<maxn+1;i++)
	{
		if(ary[i]!=0)cnt++;
	}
	printf("%d",cnt);
	for(int i=maxn;i>=0;i--)
	{
		if(ary[i]!=0)
			printf(" %d %.1f",i,ary[i]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hhmy77/article/details/88828621