版权声明:转载请注明出处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;
}