昨天 闲着没事干 look到了这道“水题”,仔细研究没想到还有很多种解法!所以充满好奇森的我就试着来整理一番,注意,是整理!
第一种 评论:太粗暴了!!!
//简单粗暴,要你变好
#include <cstdio>
using namespace std;
int main() {
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
long long a, b, c;
scanf("%lld %lld %lld", &a, &b, &c);
long long sum = a + b;
if(a > 0 && b > 0 && sum < 0) {
printf("Case #%d: true\n", i + 1);
} else if(a < 0 && b < 0 && sum >= 0){
printf("Case #%d: false\n", i + 1);
} else if(sum > c) {
printf("Case #%d: true\n", i + 1);
} else {
printf("Case #%d: false\n", i + 1);
}
}
return 0;
}
//作者:leo123456
第二种: bool法
#include<iostream>
#include<cstring>
using namespace std;
typedef long long LL;
bool check(LL a,LL b,LL c)
{
LL d=a+b;
if(a>=0&&b>=0&&d<0) return true;
if(a<0&&b<0&&d>=0) return false;
return a+b>c;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
LL a,b,c;
cin>>a>>b>>c;
if(check(a,b,c)) printf("Case #%d: true\n",i);
else printf("Case #%d: false\n",i);
}
return 0;
}
//作者:ABBCCD
第三种 评论:最常见的
#include<bits/stdc++.h>
using namespace std;
int main()
{
double a,b,c;
int e;
scanf("%d", &e);
for(int f=1;f<=e;f++)
{
cin>>a>>b>>c;
a=a+b;
if(a>c)printf("Case #%d: true\n",f);
if(a<=c)printf("Case #%d: false\n",f);
}
}
//作者:zeng9999jian
第四种
#include <iostream>
using namespace std;
using MyInt = __int128_t; // 又一种无赖的解法
int t;
string s1, s2, s3;
MyInt conv(const string& s) {
MyInt ans = 0;
bool negative = false;
for (const auto& c : s) {
if (c == '-') { negative = true; continue; }
ans = ans * 10 + c - '0';
}
return negative ? -ans : ans;
}
int main(void) {
cin >> t;
for (int i = 1; i <= t; ++i) {
cin >> s1 >> s2 >> s3;
auto a = conv(s1), b = conv(s2), c = conv(s3);
printf("Case #%d: %s\n", i, a + b > c ? "true" : "false");
}
}
//作者:王小强
第五种
#include <bits/stdc++.h>
#define LL long double
using namespace std;
LL n, a, b, c;
main() {
cin >> n;
for (long long i = 0; i < n; i++) {
cin >> a >> b >> c;
cout << "Case #" << i + 1 << ": ";
if (a + b > c)
cout << "true";
else
cout << "false";
cout << endl;
}
return 0;
}
//作者:云代码
第六种
#include <iostream>
using namespace std;
template <typename T>
inline T read()
{
T sum = 0, fl = 1;
int ch = getchar();
for (; !isdigit(ch); ch = getchar())
if (ch == '-')
fl = -1;
for (; isdigit(ch); ch = getchar())
sum = sum * 10 + ch - '0';
return sum * fl;
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
__int128_t a, b, c;
a = read<__int128_t>(), b = read<__int128_t>(), c = read<__int128_t>();
if (a + b > c) cout << "Case #" << i << ": true" << endl;
else cout << "Case #" << i << ": false" << endl;
}
}
//作者:P云
第七种:大数加法
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//判断a+b与c比较
//a+b>c返回1,<返回2,==返回3
int judge(string a,string b,string c){
int aSize=a.size();
int bSize=b.size();
int cSize=c.size();
string cur;
int aPoint=0,bPoint=0;
int carry=0;
int abit,bbit;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int i=0;
while(true){
abit=bbit=0;
if(aPoint<aSize){
abit=a[aPoint]-'0';
aPoint++;
}
if(bPoint<bSize){
bbit=b[bPoint]-'0';
bPoint++;
}
int cu=abit+bbit+carry;
if(cu>=10)
carry=1;
else carry=0;
cur.push_back(cu%10+'0');
i++;
if(aPoint>=aSize && bPoint>=bSize && carry==0)
break;
}
reverse(cur.begin(),cur.end());
int curSize=cur.size();
if(curSize>cSize)
return 1;
if(curSize<cSize)
return 2;
if(curSize==cSize)
for(int j=0;j<cSize;j++){
if(cur[j]>c[j])
return 1;
if(cur[j]<c[j])
return 2;
}
return 3;
}
int main() {
//大数加法
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
string a,b,c;
cin>>a>>b>>c;
//判定这三个数的正负情况
bool A=true,B=true,C=true;
if(a[0]=='-'){
A= false;
a.erase(a.begin());
}
if(b[0]=='-'){
B= false;
b.erase(b.begin());
}
if(c[0]=='-'){
C=false;
c.erase(c.begin());
}
if(A==true && B==true && C==false) printf("Case #%d: true\n",i+1);
else if(A==false && B==false && C==true) printf("Case #%d: false\n",i+1);
else if(A==true && B==true && C==true){//a+b?c
if(judge(a,b,c)==1)
printf("Case #%d: true\n",i+1);
else
printf("Case #%d: false\n",i+1);
}
else if(A==true && B==false && C==true){//a-b?c
if(judge(b,c,a)!=2)
printf("Case #%d: false\n",i+1);
else
printf("Case #%d: true\n",i+1);
}
else if(A==true && B==false && C==false){//a-b?-c
if(judge(a,c,b)==1)
printf("Case #%d: true\n",i+1);
else
printf("Case #%d: false\n",i+1);
}
else if(A==false && B==false && C==false){//-a-b?-c
if(judge(a,b,c)!=2)
printf("Case #%d: false\n",i+1);
else
printf("Case #%d: true\n",i+1);
}
else if(A==false && B==true && C==true){//-a+b?c
if(judge(a,c,b)!=2)
printf("Case #%d: false\n",i+1);
else
printf("Case #%d: true\n",i+1);
}
else if(A==false && B==true && C==false){//-a+b?-c
if(judge(c,b,a)==1)
printf("Case #%d: true\n",i+1);
else
printf("Case #%d: false\n",i+1);
}
}
return 0;
}
//作者:李瑞峰
第八种
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
int t,i=0;
cin>>t;
while(t--){
LL a,b,c;
cin>>a>>b>>c;
LL d=a+b;
int flag=1;
if(a>0&&b>0&&d<0) flag=0; //溢出 a、b均大于0,a+b<0
else if(a<0&&b<0&&d>=0) flag=1;//溢出a、b均小于0,a+b>=0
else if(d>c) flag=0;
if(flag==1) cout<<"Case #"<<++i<<": false"<<endl;
else cout<<"Case #"<<++i<<": true"<<endl;
}
}
//作者:llsong98
第九种(大轴):STL法
#include<iostream>
using namespace std;
long long a,b,c,d,n,k=1;
int main(){
cin>>n;
while(n--){
cin>>a>>b>>c;
d=a+b;
if(a>0&&b>0&&d<=0) printf("Case #%lld: true\n",k++);
else if(a<0&&b<0&&d>=0) printf("Case #%lld: false\n",k++);
else if(a+b>c){
printf("Case #%lld: true\n",k++);
}
else{
printf("Case #%lld: false\n",k++);
}
}
}
/***
//高精度相加和比较,没写出来,放在这里,之后再试试
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e5+10;
vector<int> add(vector<int>&a,vector<int>&b,int n,int m){
vector<int>res;
int t=0;
for(int i=0;i<n||i<m||t;i++){
if(i<n) t+=a[i];
if(i<m) t+=b[i];
res.push_back(t%10);
t/=10;
}
// 别忘了反转
reverse(res.begin(),res.end());
return res;
}
vector<int> sub(vector<int>&a,vector<int>&b,int n,int m){
vector<int>res;
if(n<m){
res=sub(b,a,m,n);
return res;
}
else if(n==m){
for(int i=n-1;i>=0;i--){
if(a[i]<b[i]) return sub(b,a,m,n);
else if(a[i]>b[i]) return sub(a,b,n,m);
}
return res;
}
//n>=m;
int t=0;
for(int i=0;i<n;i++){
t+=a[i];
if(i<m) t-=b[i];
res.push_back((t+10)%10);
if(t<0) t=-1;
else t=0;
}
//去前导零
for(int i:res){
if(i==0) res.pop_back();
else break;
}
reverse(res.begin(),res.end());
return res;
}
int main(){
int k,n,m;
cin>>k;
bool flag=false;
vector<int>a;
vector<int>b;
vector<int>res;
string sa,sb,sc;
int zer=0;
while(k--){
cin>>sa>>sb>>sc;
n=sa.size(),m=sb.size();
for(int i=n-1;i>=0;i--) {
if(i==0&&!isdigit(sa[i])) {
n--;
continue;
}
a.push_back(sa[i]-'0');
}
for(int i=m-1;i>=0;i--) {
if(i==0&&!isdigit(sb[i])) {
m--;
continue;
}
b.push_back(sb[i]-'0');
}
if(sa[0]=='-'&&sb[0]=='-'){
if(sc[0]!='-') {
cout<<"true"<<endl;
continue;
}
res=add(a,b,n,m);
if(res.size()>sc.size()){
cout<<"false"<<endl;
}
else if(res.size()<sc.size())cout<<"true"<<endl;
else{
for(int i=0;i<sc.size();i++){
if(sc[i]>res[i]){
cout<<"false"<<endl;
break;
}
else if(sc[i]<res[i]){
cout<<"true"<<endl;
break;
}
}
cout<<"true"<<endl;
}
}
..........
}
}
***/
//作者:magpie
如果有漏掉的,欢迎补充~
你的算法似乎没有漏掉
但是
# 你漏掉了一个细节!
你说:仔细研究想到……
# 这是你写的吗……你都说了这是转载………………………………………………
唔,你听我狡辩###不不不,你听我解释,我的意思是仔细研究题解嘛
hh有道理欸……
对了
# 大佬A+B还有什么思路吗
emmmm。。。不说了
总结:为了点醋包了顿饺子
haha