ACM14题

来源:互联网 发布:网络麻将群主违法吗 编辑:程序博客网 时间:2024/06/16 07:55

看到示例,没看出来具体什么意思,只是知道了先输入数字的行数,下面就是每行输入两个数字。有道翻译了以后,看了很长时间才明白,是先把数字颠倒相加,再颠倒回来。

我的思路:有两种解决办法:1.按照原文的具体意思,利用繁琐的办法,老老实实颠倒两次,中间步骤是再加在一起,最后输出。2.不用颠倒,两个数最左边第一位相加,如果不超过9,保留下来,如果超过9,就把十进制位上的数加在左边第二个数上,然后依次进行。

遇到的困难:首先,我采取的是简便方法,但是遇到了很多难题,首先就是数字的分离问题,不过这个解决了,定义char型的数组或者我们学过的string类型的都可以,但是我做这道题的时候没有这么明确地思路,想着是把一行的数输入一个string类的变量里,所以想到了要用到前面题目里getline的输入,这个地方还是害怕用错,但是现在想想,可以定义两个char类型的数组,然后逐个相加,超过9的向右边进一位。我改变了用简便方法,用了比较麻烦的两次数字颠倒。

代码:#include<iostream>
#include<vector>
using namespace std;
int main()
{
int i=0,k,b,c,d,s,j=0;
vector<int>a;
cin>>b;
while(i<2*b)
{
cin>>s;
a.push_back(s);
i++;
}
i=0;
while(i<2*b)
{
c=0;
while(a[i]!=0)
{
d=a[i]%10;
a[i]=a[i]/10;
c=c*10+d;
}
a[i]=c;
i++;
}
i=0;
while(i<2*b-1)
{
a[j]=a[i]+a[i+1];
i++;
i++;
j++;
}
i=0;
while(i<b)
{
c=0;
while(a[i]!=0)
{
d=a[i]%10;
a[i]=a[i]/10;
c=c*10+d;
}
a[i]=c;
i++;
}
i=0;
while(i<b)
{
cout<<a[i]<<endl;
i++;
}
return 0;
}

总结:代码繁琐复杂,也遇到了各式各样的问题,用了挺长时间才把代码修改好,当时没有多想,采取了比较麻烦不用高级算法的办法,其实这个代码还有很多的不足,没用vector里面的release算法,所以导致了复杂。以后会注意,思路和方法同样重要,这是一个教训。当然,人总会有想的不全面的时候,人总不是十全十美的,认识到了就是收获,希望下次会有更大进步,会努力的。

0 0