vp1-Codeforces Round #839 (Div. 3)
发布时间:2023-04-21 21:02:23 369 相关标签: # c++
A - A+B?
第一题很简单,输入a+b,输出a+b的值, 我这里用了一下c语言中的格式化输入
也可以用字符串输入,取第一个和第三个字符,减去'0',转化成数字进行计算
#include
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int a,b;
scanf("%d+%d", &a, &b);
cout<<a+b<<"\n";
}
return 0;
}
B - Matrix Rotation
手动模拟
#include
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int a, b, c, d;
cin>>a>>b>>c>>d;
//下面是,旋转0-3次的情况
if(a<c&&b<d&&a<b&&c<d){
cout<<"yes\n";
continue;
}
if(c<a&&d<b&&c<d&&a<b){
cout<<"yes\n";
continue;
}
if(d<b&&c<a&&b<a&&d<c){
cout<<"yes\n";
continue;
}
if(b<d&&a<c&&b<a&&d<c){
cout<<"yes\n";
continue;
}
else cout<<"no\n";
}
return 0;
}
C - Different Differences
又是数组的排列组合
如果n足够大,那么数组可以是1 2 4 7 11....(+1 +2 +3 +4 ...)
现在数组中的数最大到n, 那么写个if限制一下#include
using namespace std;
int a[50] = {};
int main(){
int t;cin>>t;
while(t--){
int k,n;cin>>k>>n;//数组中k个数, 最大到n
if(k==n){
for(int i = 1;i<=k;i++) cout<<i<<" ";
cout<<"\n";
continue;
}
int cnt = 1;//要想得到的结果最大,两数之间的间隔应逐渐增大
a[1] = 1;
for(int i = 2;i<=k;i++){
if(a[i-1]+cnt<=n-(k-i)){//数组中的数最大到n,现在数组中已填入i个数,还要填k-i个
a[i] = a[i-1] + cnt; //如果i-1 加上cnt后,小于等于n-(k-i),则能填进去
cnt++; //例如,n = 9,k-i = 7 ,则最大填进去2,后面的是3 4 5 6 ..
}
else{
a[i] = a[i-1] + 1;
cnt = 1;
}
}
for(int i = 1;i<=k;i++) cout<<a[i]<<" ";
cout<<"\n";
}
return 0;
}
文章来源: https://blog.51cto.com/u_15932342/5994553
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报