问题标题: 酷町堂:4941

0
0
已解决
被禁言 何冯成
何冯成
中级光能
中级光能
啊啊啊,4941真难写。

怎么办,凉拌,炒鸡蛋,好吃又好拌。

本人0分代码:

#include<iostream>
using namespace std;
int d[110000],x[110000],s=0,sum[101000];
int main(){
int a,b;
cin>>a>>b;
for(int i=1;i<=a;i++){
	cin>>d[i];
}
for(int i=1;i<=b;i++){
	cin>>x[i];
}
if(a>b){
	b=a;
	a=b;
}
else {
	a=b;
	b=a;
}
for(int i=1;i<=a;i++){
	sum[i]=d[i]+x[i];
}
for(int i=1;i<=a;i++){
	cout<<sum[i]<<" ";
}
return 0;
}

啊啊啊

求大佬指导一下(两下也可以)嘻嘻

求思路啊啊啊

何冯成在2020-05-02 17:51:21追加了内容

@龙舟 


0
已采纳
黄子扬
黄子扬
初级天翼
初级天翼

让用vector是因为向量是动态数组不用管数组大小吧?于是我用了map(滑稽

这两个都不需要预设长度,你可以理解为无限长的数组,但是占得空间小,这题如果用数组就可能爆了?

(反正我也没试过,自从很久之前知道vector和map以后写稍微正经一点的题目我就没用过数组了

vector<数据类型>变量名称/map<下标的数据类型,存储值得数据类型>变量名称

虽然这两个STL都自带一些自身的函数,但不容易习惯使用,你可以直接像数组那样直接输入

vector直接当作数组用,数组能干啥,它就能干啥,而且它不越界

map更能直接当作数组用,数组有些不能干的,它依旧能干:

因为可以自定义下标的数据类型,于是你可以

1.map<int,int>a; a[-1]=1;负数下标

2.map<string,int>a; a["abc"]=1;字符串下标

3. ··· ···                 诸如此类的很多

我在写猪国杀的时候拿map存手牌就认为很直观方便,这就是C++ STL的优势所在

(然而写栈、队列的时候STL 就很鸡肋了

以下是题目部分:

1.map初始化加数和和(滑稽

map<int,int>s1;
map<int,int>s2;
map<int,int>s3;

当然,如果你想严格按照题目

改成

vector<int>s1;
vector<int>s2;
vector<int>s3;

即可,后面没有任何影响

2.像数组那样读入

for(int i=1;i<=m;i++)
        scanf("%d",&s1[i]);
for(int i=1;i<=n;i++)
        scanf("%d",&s2[i]);

3.用一个k存位数

 k=max(m,n);

4.相加,处理进位

for(int i=1;i<=k;i++)
    {
        s3[i]+=s1[i]+s2[i];
        s3[i+1]+=s3[i]/10;
        s3[i]%=10;
    }

因为是逆序相加,所以进位往i+1位加

5.如果最高位的下一位仍有数,位数自增1

例如999+999=1998 多了一位

if(s3[k+1]) k++;

由于是加法,所以不会存在两数相加后位数多了两位

6.像数组那样输出

for(int i=1;i<=k;i++)
        printf("%d ",s3[i]);

至此完成

黄子扬在2020-05-03 18:43:33追加了内容

那些思路或代码是数字的同学就不要回答了,如果数组能完成还标一个STL是为了显现数据水吗

黄子扬在2020-05-03 18:45:32追加了内容

顺便谢谢您送来的经验

 

大数相加2我也一同切了

0
董宇昊
董宇昊
初级启示者
初级启示者

STL-vector

你学到了吗?

0
0
高子健
高子健
新手天翼
新手天翼

我看了看(虽然没学但是大概有思路)

输出<<(自己想想)

把a[i]倒过来

在把b[i]倒过来

sum=倒过来的a[i]加上倒过来b[i]

输出<<倒过来的sum;

我要回答