200 条题解
-
0
Code 1
按题意,输出 即可。
#include <iostream> using namespace std; int main(){ int a, b; cin >> a >> b; cout << a + b; return 0; }Code 2
输出 ,等同于 。
#include <iostream> using namespace std; int main(){ int a, b; cin >> a >> b; cout << a - (-b); return 0; }Code 3
按进位和不进位递归。
#include <iostream> using namespace std; int add(int x, int y){ if(y == 0) return x; return add(x ^ y, (x & y) << 1); } int main(){ int a, b; cin >> a >> b; cout << add(a, b); return 0; } -
0
本题解针对C++语言。
这是一道基础的入门题。
首先阅读题目描述:输入两个正整数,输出它们的和。
阅读输入格式:一行两个正整数a,b,以空格分隔。 因此,使用如下代码定义变量并读取:
int a,b; cin >> a >> b;接着,阅读输出格式:一个正整数a+b。
使用如下代码实现:
cout << a + b;检查数据范围,发现int类型不会发生溢出。(提醒:如果a,b超过,应使用long long类型)
最终,代码如下:
#include <iostream> using namespace std; int main(){ int a,b; cin >> a >> b; cout << a + b; return 0; }以下内容针对C++语言初学者,与本题无关。
C++语言的基本格式如下:
#include <iostream> // 引入头文件以实现输入输出 using namespace std; // 引入命名空间,防止标识符冲突,此处使用标准命名空间(std) int main(){ // 程序从这里开始运行 // your code return 0; // 程序在这里结束 } -
0
#include<bits/stdc++.h> #define _rep(i,a,b) for(int i=(a);i<=(b);i++) #define _antirep(i,a,b) for(int i=(a);i>=(b);i--) using namespace std; typedef long long lxl; string a,b,ans; int x; int main() { cin>>a>>b; int len=max(a.size(),b.size()); while(a.size()<len) a='0'+a;//补零 while(b.size()<len) b='0'+b;//补零 _antirep(i,len-1,0) { int c=a[i]-'0',d=b[i]-'0'; ans=(char)((c+d+x)%10+'0')+ans; x=(c+d+x)/10; } if(x!=0) ans=(char)(x+'0')+ans; cout<<ans; return 0; } -
0
声明:后几种方法一般不用
C++题解
这里采用多种方法求解。
方法一
读入a和b,输出a+b。
#include <bits/stdc++.h> using namespace std; int a, b; int main() { scanf("%d%d", &a, &b); printf("%d\n", a + b); return 0; }如果你看不懂上面的代码,那你可以看看下面的。
#include <bits/stdc++.h> using namespace std; #define 开始啦 main() #define 开头 { #define 结尾 } #define 和 , #define 没了 return 0 #define 整数32位 int #define 输入 cin #define 输出 cout #define 一个 >> #define 这个 << #define 加上 + #define 换行 '\n' 整数32位 开始啦 开头 整数32位 a 和 b; 输入 一个 a 一个 b; 输出 这个 a 加上 b 这个 换行; 没了; 结尾方法二
数手指都会吧,我们就用“数手指”的方法做这一题。
#include <bits/stdc++.h> using namespace std; int a, b, ans = 0; int main() { scanf("%d%d", &a, &b); for (int i = 1; i <= a; i++) ans++; for (int j = 1; j <= b; j++) ans++; printf("%d\n", 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() { scanf("%d%d", &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; } printf("%d\n", ans); return 0; }队列写法
#include <bits/stdc++.h> using namespace std; int a, b, ans = 0; queue<int> q; int main() { scanf("%d%d", &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; } printf("%d\n", ans); return 0; }堆写法
#include <bits/stdc++.h> using namespace std; int a, b, ans = 0; priority_queue<int> h; int main() { scanf("%d%d", &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; } printf("%d\n", 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--) printf("%d", c[i]); printf("\n"); return 0; }你竟然认真的看完了!
恭喜你,把简单的问题复杂化了!要是你真的看懂了,就说明你
太没事闲的了! -
0
#include<iostream> #define 声明32位整型 int #define 左圆括号 ( #define 右圆括号 ) #define 左花括号 { #define 右花括号 } #define 使用 using #define 名字空间 namespace #define 输入 cin>> #define 输出 cout<< #define 和 >> #define 以及 << #define 声明64位整型 long long #define 返回 return #define 加 + 使用 名字空间 std; 声明32位整型 main 左圆括号 右圆括号 左花括号 声明64位整型 a,b; 输入 a 和 b; 输出 a 加 b; 返回 0; 右花括号 -
0
做出这道题,那么恭喜你踏上了万里征程的第一步!
这是一道适合入门级选手练手的题目,本篇题解为大家介绍 cin 和 cout 。
cin :标准输入流。
输入:
cin>>变量名;
多个输入:cin>>变量名1>>变量名2……;cout :标准输出流。
输出变量:
cout<<变量名;
输出单个字符:cout<<'字符';
输出一串字符:cout<<"一串字符";
输出换行:cout<<endl;本题代码及解析
#include<iostream>//头文件,可调用cin、cout using namespace std;//标准命名空间 int main(){//主函数 int a,b;//定义变量 cin>>a>>b;//输入a,b cout<<a+b;//输出a,b之和 return 0;//返回0 } -
0
童鞋们你们好!
打开这道题,就相当于你们迈出了万里 OI 路的第一步。让我们重视这一步!
这里提醒同学们:好的代码风格是非常重要的。大家一定要养成良好的代码风格。
来看看我打的代码:
#include<bits/stdc++.h> //万能头 using namespace std; //使用std这个命名空间 int main() { int a, b; //1e6 int够用 cin >> a >> b; //cin = console+input 标准读入 cout << a + b; //cout = console+output 标准输出 return 0; //不要忘了一个华丽的结尾 }最后想请童鞋们注意:强烈建议
cin/cout中<</>>符号前后打一个空格!这样能让你的代码更加美观!这就是我们万里编程路的第一步。在以后的刷题中,大家会遇到更多的难题。希望大家能不忘初心,砥砺前行!
说歪了。感谢观看!
-
0
LCT解法
#include <iostream> #include <cstring> #include <cstdio> #include <cstring> using namespace std; struct node { int data,rev,sum; node *son[2],*pre; bool judge(); bool isroot(); void pushdown(); void update(); void setson(node *child,int lr); }lct[233]; int top,a,b; node *getnew(int x) { node *now=lct+ ++top; now->data=x; now->pre=now->son[1]=now->son[0]=lct; now->sum=0; now->rev=0; return now; } bool node::judge(){return pre->son[1]==this;} bool node::isroot() { if(pre==lct)return true; return !(pre->son[1]==this||pre->son[0]==this); } void node::pushdown() { if(this==lct||!rev)return; swap(son[0],son[1]); son[0]->rev^=1; son[1]->rev^=1; rev=0; } void node::update(){sum=son[1]->sum+son[0]->sum+data;} void node::setson(node *child,int lr) { this->pushdown(); child->pre=this; son[lr]=child; this->update(); } void rotate(node *now) { node *father=now->pre,*grandfa=father->pre; if(!father->isroot()) grandfa->pushdown(); father->pushdown();now->pushdown(); int lr=now->judge(); father->setson(now->son[lr^1],lr); if(father->isroot()) now->pre=grandfa; else grandfa->setson(now,father->judge()); now->setson(father,lr^1); father->update();now->update(); if(grandfa!=lct) grandfa->update(); } void splay(node *now) { if(now->isroot())return; for(;!now->isroot();rotate(now)) if(!now->pre->isroot()) now->judge()==now->pre->judge()?rotate(now->pre):rotate(now); } node *access(node *now) { node *last=lct; for(;now!=lct;last=now,now=now->pre) { splay(now); now->setson(last,1); } return last; } void changeroot(node *now) { access(now)->rev^=1; splay(now); } void connect(node *x,node *y) { changeroot(x); x->pre=y; access(x); } void cut(node *x,node *y) { changeroot(x); access(y); splay(x); x->pushdown(); x->son[1]=y->pre=lct; x->update(); } int query(node *x,node *y) { changeroot(x); node *now=access(y); return now->sum; } int main() { scanf("%d%d",&a,&b); node *A=getnew(a); node *B=getnew(b); connect(A,B); cut(A,B); connect(A,B); printf("%d\n",query(A,B)); return 0; }
信息
- ID
- 56
- 时间
- 1000ms
- 内存
- 1024MiB
- 难度
- 1
- 标签
- 递交数
- 12363
- 已通过
- 5577
- 上传者