B2053
求一元二次方程 - 洛谷
掌握printf用法;
#include <iostream>
#include <cmath>
using namespace std;
double a,b,c;
double delta;
double x1,x2;int main() {cin>>a>>b>>c;delta = b*b-4*a*c;if(delta>0){x1 = (-b+sqrt(delta))/(2*a);x2 = (-b-sqrt(delta))/(2*a);if(x1>x2)printf("x1=%.5lf;x2=%.5lf",x2,x1);else{printf("x1=%.5lf;x2=%.5lf",x1,x2);}}else if(delta==0){x1 = (-b+sqrt(delta))/(2*a);printf("x1=x2=%.5lf",x1);}else{cout<<"No answer!";}
}
减少代码量,利用swap算法,交换x1,x2值;
#include <iostream>
#include <cmath>
using namespace std;
double a,b,c;
double delta;
double x1,x2;int main() {cin>>a>>b>>c;delta = b*b-4*a*c;if(delta>0){x1 = (-b+sqrt(delta))/(2*a);x2 = (-b-sqrt(delta))/(2*a);if(x1>x2)swap(x1,x2);printf("x1=%.5lf;x2=%.5lf",x1,x2);}else if(delta==0){x1 = (-b+sqrt(delta))/(2*a);printf("x1=x2=%.5lf",x1);}else{cout<<"No answer!";}
}
B3854
注意必须得是long long型,不然会有部分测试不通过。
#include <iostream>
using namespace std;
long long m,n,a,b;
int main() {cin>>m>>n>>a>>b;if((m-a)*n>=b+1)cout<<"Program ends with return value 0.";elsecout<<"Segmentation fault.";
}
知识小拓展
在 C++ 中,`ios::sync_with_stdio(false);` 是一条指令,用来关闭 C++ 的 `iostream` 类库(如 `cin` 和 `cout`)与 C 的标准输入输出库(如 `scanf` 和 `printf`)之间的同步。默认情况下,这两个库是同步的,以保证你可以在同一个程序中混合使用它们,并按照预期的顺序进行输入和输出操作。
当你调用 `ios::sync_with_stdio(false);` 之后,这种同步被关闭,这样做可以提高 `iostream` 的输入输出效率,因为取消了与 C 标准库的额外同步操作。但是,一旦同步关闭,就不应该混用 `iostream` 和 C 的标准输入输出库,因为它们的输出可能不会按照你写代码时的顺序出现。
这条指令经常用在需要大量输入输出操作,且对程序运行时间要求很高的情况,比如算法竞赛,因为它可以显著减少输入输出所需的时间。
下面是一个例子,展示如何在程序中使用它:
#include <iostream>int main() {// 关闭同步std::ios::sync_with_stdio(false);// 取消 cin 与 stdin 的绑定,以提高读取效率std::cin.tie(NULL);// 你的代码逻辑std::cout << "Fast output without sync!\n";// 后续不要使用任何 C 的标准输入输出函数return 0;
}
请注意,调用 `ios::sync_with_stdio(false);` 之后,还应该调用 `cin.tie(NULL);` 来解除 `cin` 与 `cout` 之间的绑定,这样可以进一步提升输入输出的效率。这条指令会导致 `cin` 在每次从 `cout` 输出之前不再自动刷新缓冲区。
B3825
#include<iostream>
using namespace std;
int x,h;
int main(){ios::sync_with_stdio(0);//不能再混用 C 和 C++ 的输入输出功能,iostream 库的效率会提高cin.tie(0);cin>>x>>h;if(x<10) cout<<"Drizzle";else if(x>=10 && x<25) cout<<"Moderate Rain";else if(x>=25 && x<50) cout<<"Heavy Rain"; else if(x>=50) cout<<"Torrential Rain";if(h==1){if(x>=20) cout<<endl<<"YES";else cout<<endl<<"NO";}
}
B3814-可多看几次
for (auto it = direcion.begin(); it != direcion.end(); ++it) {pair<int, int>& move = *it;int nx = mx + move.first;int ny = my + move.second;
#include<iostream>
#include <vector>
#include <utility>
#include<set>
using namespace std;//判断棋子是否在棋盘内
bool inBoard(int x,int y){return x >= 1 && x <= 10 && y >= 1 && y <= 9;
}int main(){int sx, sy, cx, cy, mx, my; cin >> sx >> sy >> cx >> cy >> mx >> my;//c++11之前不支持// std::vector<std::pair<int, int> > moves = {// {-2, 1}, {-2, -1}, {-1, 2}, {-1, -2},// {1, 2}, {1, -2}, {2, 1}, {2, -1}// };vector<pair<int, int> > direcion;direcion.push_back(make_pair(-2, 1));direcion.push_back(make_pair(-2, -1));direcion.push_back(make_pair(-1, 2));direcion.push_back(make_pair(-1, -2));direcion.push_back(make_pair(1, 2));direcion.push_back(make_pair(1, -2));direcion.push_back(make_pair(2, 1));direcion.push_back(make_pair(2, -1));// 存储马在移动后可以攻击的位置set<pair<int, int> >attackPositions;//遍历马的移动for (auto &move : direcion) {int nx = mx + move.first;int ny = my + move.second;// 如果移动后仍在棋盘内if (inBoard(nx, ny)) {// 遍历该位置马可以攻击的所有位置for (auto &attack : direcion) {int ax = nx + attack.first;int ay = ny + attack.second;// 如果攻击位置在棋盘内,则添加到攻击位置集合中if (inBoard(ax, ay)) {attackPositions.insert(make_pair(ax, ay));}}}}// 检查帅和车是否在马的攻击范围内if (attackPositions.count(make_pair(sx, sy)) > 0 && attackPositions.count(make_pair(cx, cy)) > 0) {cout << "Yes" << endl;} else {cout << "No" << endl;}return 0;}
B3720(可复看)
#include <cstddef>
#include <iostream>
#include <string>using namespace std;int main() {long long x;cin >> x;string dishes;cin >> dishes;// 检查是否购买了 B 菜和 C 菜bool hasB = dishes.find('B') != string::npos;//string::npos 是一个常量,表示未找到的位置。它的值通常是最大的有效索引值加一bool hasC = dishes.find('C') != string::npos;// 根据购买的菜品计算折扣if (hasB && hasC) {// 两种菜都买了,打六折x = x * 6 / 10;} else if (hasB) {// 只买了 B 菜,打八折x = x * 8 / 10;} else if (hasC) {// 只买了 C 菜,打七折x = x * 7 / 10;}cout << x << endl;return 0;
}
字符方法,进行简单判断:
#include <iostream>using namespace std;int main() {long long x;cin >> x;char dish1, dish2;cin >> dish1 >> dish2;// 检查是否购买了 B 菜和 C 菜bool hasB = dish1 == 'B' || dish2 == 'B';bool hasC = dish1 == 'C' || dish2 == 'C';// 根据购买的菜品计算折扣if (hasB && hasC) {// 两种菜都买了,打六折x = x * 6 / 10;} else if (hasB) {// 只买了 B 菜,打八折x = x * 8 / 10;} else if (hasC) {// 只买了 C 菜,打七折x = x * 7 / 10;}cout << x << endl;return 0;
}
count方法
#include <iostream>
#include <string>
#include <algorithm> // 引入算法库,以使用 std::countusing namespace std;int main() {long long x;cin >> x;string dishes;cin >> dishes; // 读取两个字符作为一个字符串// 使用 count 统计 B 和 C 的出现次数int countB = count(dishes.begin(), dishes.end(), 'B');int countC = count(dishes.begin(), dishes.end(), 'C');// 检查是否购买了 B 菜和 C 菜bool hasB = countB > 0;bool hasC = countC > 0;// 根据购买的菜品计算折扣if (hasB && hasC) {// 两种菜都买了,打六折x = x * 6 / 10;} else if (hasB) {// 只买了 B 菜,打八折x = x * 8 / 10;} else if (hasC) {// 只买了 C 菜,打七折x = x * 7 / 10;}cout << x << endl;return 0;
}
B3677
简单分类讨论即可。
#include<iostream>
#include<cmath>
using namespace std;int main(){long long a,b;cin>>a>>b;if(b==0)cout<<"NO"<<endl<<"YES"<<endl;else{if(a>=0){cout<<"NO"<<endl;}else{if(b%2==0){cout<<"NO"<<endl;}else{cout<<"YES"<<endl;}}if(abs(a)%2==1){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}}