14 条题解
-
3
这里采用多种方法求解。
方法一:读入·运算·输出
#include <bits/stdc++.h> using namespace std; int a,b; int main(){ cin>>a>>b; cout<<a+b; return 0; }方法二:“数手指”方法
#include <bits/stdc++.h> using namespace std; int a,b,ans=0; int main() { cin>>a>>b; for (int i=1;i<=a;i++) ans++; for(int i= 1;i<=b;i++) ans++; cout<<ans; return 0; }方法三:从算法数据结构的角度思考 设计一个算法:先将a和b插入到一个数据结构(栈、队列或堆)中,非空时,将头上的元素取出,如果大于1则拆成它减1和1(根据自己的喜好)再插入,否则统计答案。
栈写法
#include <bits/stdc++.h> using namespace std; int a,b,ans=0; stack<int> s; int main(){ cin>>a>>b; s.push(a); s.push(b); while(!s.empty()){ int x=s.top(); s.pop(); if(x>1){ s.push(x-1); s.push(1); } else ans+=x; } cout<<ans; return 0; }队列写法
#include <bits/stdc++.h> using namespace std; int a,b,ans=0; queue<int> q; int main(){ cin>>a>>b; q.push(a); q.push(b); while(!q.empty()){ int x=q.front(); q.pop(); if(x>1){ q.push(x-1); q.push(1); } else ans+=x; } cout<<ans; return 0; }堆写法
#include <bits/stdc++.h> using namespace std; int a,b,ans=0; priority_queue<int> h; int main(){ cin>>a>>b; h.push(a); h.push(b); while(!h.empty()){ int x=h.top(); h.pop(); if (x>1) { h.push(x-1); h.push(1); } else ans+=x; } cout<<ans; return 0; }方法四:使用高精度加法
#include <bits/stdc++.h> using namespace std; char s1[100], s2[100]; int a[100], b[100], c[100]; int main() { scanf("%s%s",s1+1,s2+1); int la=strlen(s1+1),lb = strlen(s2+ 1),lc; lc=max(la,lb); for (int i = 1; i <= la; i++) a[i] = s1[la - i + 1] - '0'; for (int i = 1; i <= lb; i++) b[i] = s2[lb - i + 1] - '0'; memset(c, 0, sizeof(c)); for (int i = 1; i <= lc; i++) { c[i] += a[i] + b[i]; c[i + 1] = c[i] / 10; c[i] %= 10; } if (c[lc + 1] > 0) lc++; for (int i = lc; i >= 1; i--) printf("%d", c[i]); printf("\n"); return 0; }方法五:将方法三和方法四结合
#include <bits/stdc++.h> using namespace std; int a,b,c[100],lc=1; priority_queue<int> h; int main() { scanf("%d%d", &a, &b); h.push(a); h.push(b); memset(c,0,sizeof(c)); while (!h.empty()) { int x=h.top(); h.pop(); if (x>1){ h.push(x-1); h.push(1); } else { c[1]+=x; for (int i=1;i<=lc;i++){ c[i+1]+=c[i]/10; c[i]%=10; } if(c[lc+1]>0) lc++; } for(int i=lc;i>=1;i--) cout<<c[i]; cout<<endl; return 0; }你竟然认真的看完了!!! 恭喜你,把简单 的问题复杂 化了!要是你真的看懂了,就说明你太没事闲的了!
信息
- ID
- 5059
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 2222
- 已通过
- 1478
- 上传者